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.