On Tuesday, 25 October 2022 at 13:51:30 UTC, Andrey Zherikov wrote:
    A[] a = [A.init];

This is a problem - this is referring to a static array instance, shared across all copies of B. You almost certainly don't want this.

That B.a[0] is the *same object* across different default-constructed Bs... unless the optimizer hits it or something.

But just don't do this. Only basic values and immutable strings are good to initialize this way. With the array or class objects, you're liable to get some shared thing.

If you change this to be initialized in a constructor (which will require an argument in D) or factory function, you'll get far more consistent behavior as each instance will have its own array.

As for why B() and B.init are different here... i don't know, probably some subtly of the compiler's implementation.

Reply via email to