bearophile wrote:
> Ali Çehreli:
>
>>  >> auto s = S(1, 2);
>>
>> Doesn't work for structs that have opCall (or maybe an opCall with
>> matching parameters to that use).
>
> Try:
> static S opCall(int x, int y) { this.x = x; this.y = y; }

As 'this' is not available in static member functions; you mean

    static S opCall(int x, int y)
    {
        S s;
        s.x = x;
        s.y = y;

        return s;
    }

But that is basically the constructor. I don't understand why opCall gets in the way in

  auto s = S(1, 2);

The right hand side should call the constructor. Only after an object is constructed, should opCall be used:

  s(3, 4);

That's what I expected, but there must be a rationale... :)

>> I think the {} should still default initialize the
>> remaining members (like C and C++).
>
> That's what it does.

Not with dmd 2.037. :(

I've responded to your message on the other thread titled "struct members not default initialized?". It turned out to be a bug that was reported about a year ago:

  http://d.puremagic.com/issues/show_bug.cgi?id=2485

Ali

Reply via email to