On 06/07/2018 11:26 PM, Ethan wrote:
The spec isn't clear on this but it uses the same rules as struct field initialisation, ie it's defined once and copied to each instance on creation.

https://dlang.org/spec/struct.html#default_struct_init

It says there that "The default initializers may not contain references to mutable data."

DMD enforces that for pointers to primitives, but not for arrays, class objects, or even pointers to structs:

----
struct S
{
int* p = new int(1); /* Error: cannot use non-constant CTFE pointer in an initializer */
    int[] a = [1, 2, 3]; /* no error */
    C c = new C; /* no error */
    S2* s = new S2; /* no error */
}

class C { int x = 4; }
struct S2 { int x = 5; }
----

Seems inconsistent to me.

Reply via email to