On Thursday, 10 January 2013 at 23:03:30 UTC, Namespace wrote:
Is it expected behaviour that this code compiles and prints:
I think it is. Postblit 'this(this)' occurs while initializing a variable from one, rather than copying. Which you also can compare against move symantics.
Correct me if i'm wrong. struct S { this(this) {writeln("this(this)"); } void opAssign(ref S s) {writeln("opAssign ref/copy");} void opAssign(S s) {writeln("opAssign move");} } //postblit S s1; S s2 = s1; //opAssign ref (copy) S s3; s3 = s1; //opAssign S (Move) S func() {return S();} s3 = func(); output: this(this) opAssign ref/copy opAssign move