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

Reply via email to