> On 19 Jan 2015, at 11:50, Akim Demaille <[email protected]> wrote:
>
>> Le 19 janv. 2015 à 11:18, Hans Aberg <[email protected]> a écrit :
>> Perhaps it is not needed: the compiler inserts std::move in code like:
>> int main () {
>> A a, b, c, d, e;
>> e = a*b + c*d;
>
> Well, this is an rvalue, so it is expected to move the result.
By replacing, in the calc++ example, “int” with an “Int” class writing out the
constructors, I get pairs of copy constructors in sequence on the same value,
and one in each pair is due to
basic_symbol (typename Base::kind_type t, const Int v, const location_type&
l);
not having a reference: Int const&. The other, I do not know. Also there are
same value assignments of the form “a = a”. (And std::swap results in three
std::move instead of one if there is an assignment.)
But apart from that only std::move(). So it is quite close.