On Monday, 19 November 2012 at 12:10:32 UTC, Dan wrote:
[...]
provide it - you do not need an opAssign at all, as your postblit will be called. I think this is a step up over C++.

The example below prints:
----------------------------------------------
Begin assign
postblit A
End assign
----------------------------------------------

import std.stdio;
import std.traits;

struct A {
  this(this) { c = c.dup; writeln("postblit A"); }
  char[] c;

}
struct B { A a; }
struct C { B b; }
struct D { C c; }

void main() {
  D d1, d2;
  d1.c.b.a.c = ['a','b','c'];
  writeln("Begin assign");
  d2 = d1;
  writeln("End assign");
}

That's VERY interesting indeed and originally I had no idea it would do this without a custom opAssign at each level.

This kind of behavior *really* needs to be documented in precise detail, it's rather critical to know.

--rt

Reply via email to