On Thu, Sep 05, 2013 at 01:04:30AM +0200, Kapps wrote: > On Wednesday, 4 September 2013 at 23:00:07 UTC, H. S. Teoh wrote: > >On Wed, Sep 04, 2013 at 02:14:26PM -0700, Ali Çehreli wrote: > >>On 09/04/2013 01:46 PM, Adam D. Ruppe wrote: > >> > >>> D does not support implicit struct construction. > >> > >>That's what I knew. > >> > >>> Interestingly though, it *does* support it for functions taking > >>> classes: > >>> > >>> class Foo { > >>> this(int i) {} > >>> } > >>> > >>> void foo(Foo f...) {} > >>> > >>> void main() { > >>> foo(10); > >>> } > >> > >>WHAT? :) It even new's one? > >> > >>But it works only for the ellipsis. > >> > >>I wonder why the discrepancy... > >[...] > > > >Whoa. I never knew about this! It's ... I don't know what to say. It > >seems to be a cool feature, but it's also ... so scary. Implicit > >new's just leaves a lump in my throat. Is this an actual, intentional > >feature??! > > > > > >T > > It, in theory, doesn't allocate memory: > "An implementation may construct the object or array instance on the > stack. Therefore, it is an error to refer to that instance after the > variadic function has returned"
That's even more scary. So the object implicitly constructed in this way is put on the *stack* instead of the heap, and becomes invalid after the function returns? That's just a minefield of pitfalls waiting to happen... T -- Curiosity kills the cat. Moral: don't be the cat.