Support implicit conversion between types

H. S. Teoh hsteoh at quickfur.ath.cx
Wed Sep 4 16:07:28 PDT 2013


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.


More information about the Digitalmars-d-learn mailing list