On 3/30/15 1:09 PM, matovitch wrote:
Hi,
Surely I am misunderstanding something.
I got something like this :
struct S
{
void opAssign(const ref s)
{
//...
}
}
S genS()
{
S s;
//...
return s;
}
main()
{
S s;
s = genS();
}
DMD says : ...opAssign (ref const(S) point) is not callable using
argument types (S).
Then how to do what I wanna do ? Why doesn't this works ? (I am gessing
ref argument explitly means no rvalue)
Thanks in advance for your help ! :)
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.
Another possibility is to use auto ref, but that requires a template.
Annoying as this is (and blatantly awkward), it saves you from having to
implement twice:
void opAssign(T)(auto ref const T s) if(is(T == S)) {...}
-Steve