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.