On Monday, 2 October 2017 at 08:47:47 UTC, Andrea Fontana wrote:
Why this code doesn't write two identical lines?

https://dpaste.dzfl.pl/e99aad315a2a

Andrea

A reduced example of where it goes wrong:

class B {}

struct A {
    B b = new B;
}

unittest {
    A a1, a2;
    assert(a1 == a2);
}

In other words, when you initialize the class reference in your struct, it has to be a value that's known at compile-time. So the compiler creates a single instance of B, and every instance of A points to it. So this line:

    A a = A(A(1), 2);

first appends 1 to b.data, then appends 2 to b.data, and it's the same b in both cases.

Not knowing what you're attempting to do, I'm not sure how to fix your problem. But if what I've described above does indeed cover it, initializing b in the constructor is the way to get it to work.

--
  Biotronic
  • Struct bug? Andrea Fontana via Digitalmars-d-learn
    • Re: Struct bug? Biotronic via Digitalmars-d-learn

Reply via email to