On Sun, 03 Jun 2012 15:40:32 +0200, Timon Gehr <[email protected]> wrote:

DMD 2.059:

struct S{
     immutable x = [1];
     immutable y = 1;
}

void main(){
     writeln(S.x);        // ok
     writeln(&S.x);       // ok
     writeln(S.y);        // ok
     // writeln(&S.y);    // error
     with(S) writeln(&y); // ok (but resulting pointer is wrong)
}

This behaviour is obviously buggy, but I am not sure to what extent.

What is the intended behaviour? Should initialised immutable instance
variables be accessible without an instance at all?


It gets worse:

    writeln(S.sizeof);  // 1, which is the same as an empty struct
    S s;
    writeln(&s);        // Gives a good pointer
    writeln(&s.x);      // Gives a completely different pointer
                        // (the same as for &S.x)

This should show clearly that the compiler treats these as enum instead of
immutable, and thus do not leave them in the struct.

Reply via email to