On 10/19/2015 02:26 PM, Adam D. Ruppe wrote:
On Monday, 19 October 2015 at 18:16:15 UTC, Andrei Alexandrescu wrote:
Tangentially related: since when we allow field initialization with
new? I was surprised to see that this works:

Since CTFE started supporting it... this might actually be an
unintentional feature.

Since the initializer is in a static context, the right hand side gets
CTFE'd, which means that actually points to an array in the data
segment... the *same* array in the data segment for all initializations
(the pointer is just blitted over with the rest of init), which might be
a bit surprising.

I've seen a lot of people do this with classes not realizing it makes a
static instance!

This works too:


struct A {
    int[] x = new int[10];
}

void main() {
    import std.stdio;
    A a;
    a.x[1] = 42;
    writeln(a.x);
}

Looks like a bona fide runtime array to me.


Andrei

Reply via email to