On Sunday, 12 May 2013 at 11:27:50 UTC, evilrat wrote:
oh right, struct A { this(this) { copy referenced mem here} }or struct A { ref A opAssign(ref const A other) { this = other; return this; } }so if you have fields that should be fully copied like array this is the place to do it, otherwise there is a reference arguments, if both is no go for you then this behavior would make more trouble than benefits and thats.so gather all up here are some little example ---- struct A { int x; int[] array; this(int x) { this.x = x; array ~= x; } this(this) { array = array.dup; }ref A opAssign(ref const A other) { this = other; return this; }} void main() { A a1 = A(1); A a2 = A(2); A a3 = a2; a2.x = 5; assert(a2.x == 5); assert(a2.array[0] == 5); assert(a3.x == 2); assert(a3.array[0] == 2); assert(a2.array.length == 1); assert(a3.array.length == 1); }
You're assigning to 'this', i.e. calling assignment operator, inside the assignment operator. That results in an infinite recursion. That code never calls the assignment operator though, but try a1 = a2 for example and that should crash.
