
Joel de Guzman wrote: <snip>
> > Actor a; > Actor b = ...; > a = b; // no-op?
It should copy the contents. Thomas?
Not really. It needs to create the assign actor (that means the expression template representing the assignment operation. It is neither a no-op nor is the assignment "executed". Remember the stuff about phoenix being lazy ;)?
No! That's not the case here. There *is* still the immediate assignment operator being called when two actors are of the same type (e.g. when lhs and rhs are phoenix values). In these cases, a *is* assigned to *b*. Thus, for values, the contents are copied. Ditto for copy construction of course. <snip>
Seems like i don't stand a chance. I was trying to find a use case where you might want the lazy version of the assignment ... couldn't find one. Added the operator=(actor const&) to phoenix 3.
Thanks for the hint.
But here's where it gets tricky: Even a slight change in type will make it lazy. Consider a: value<int> b: value<short>.
Ok ... we can't detect this (probably) in any sane manner. And it is not needed to fulfill the Assignable requirement.