Consider a type T supporting the default move semantics. Also consider the function below:
T f() {
T t;
return t;
}
T o = f();
In the old C++03, some non-optimal compilers might call the copy constructor twice, one for the "return object" and one for o.
In c++11, since t inside f() is an lvalue, those compilers might call the copy constructor one time as before, and then call the move constructor for o.
Is it correct to state that the only way to avoid the first "extra copy" is to move t when returning?
T f() {
T t;
return std::move(t);
}