With DMD 2.053 the second assert of this program fires, is this a DMD bug? struct Foo { int[] data; this(int n) { data.length = n; } this(this) { data = data.dup; } } void main() { Foo f1, f2; f1 = Foo(1); f2 = f1; assert(f1.data.ptr != f2.data.ptr); // OK f1 = f2 = Foo(1); assert(f1.data.ptr != f2.data.ptr); // asserts }
The bug mechanism is: struct Foo { int[] data; this(int n) { data.length = n; } this(this) { data = data.dup; } // Implicitly generated by compiler ref Foo opAssign(Foo rhs) { ... } } void main() { ... f1 = f2 = Foo(1); // is translated to: f1.opAssign(f2.opAssign(Foo(1))); // f2.opAssign returns ref Foo } "Postblit not called on ref returned object" is same as bug 6119. Then, this was a dup of it. *** This issue has been marked as a duplicate of issue 6119 ***
Sorry, I missed. This is a dup of bug 6199. *** This issue has been marked as a duplicate of issue 6199 ***