On Monday, 30 March 2015 at 17:21:53 UTC, Steven Schveighoffer wrote:
One solution is to overload

void opAssign(ref const S s) {...}
void opAssign(const S s) {...}

lvalues will go into the ref version, rvalues into the non-ref. There won't be any copying of data, so you still save a postblit and copying on the stack.

But you have to repeat the implementation.

You can call the ref version from the non-ref version:

void opAssign(ref const S s) {...}
void opAssign(const S s) {opAssign(s); /* calls the ref version */}

Of course, only do this when the ref version doesn't store &s.

Reply via email to