私のコンパイラは、最新の VC++ 2013 プレビューです。
#include <utility>
struct BigObject { ... };
void f(BigObject&&){}
void f(BigObject&) {}
void f(BigObject) {}
int main()
{
BigObject big_obj;
BigObject& r1 = big_obj; // OK.
BigObject&& r2 = big_obj; // error C2440
BigObject&& r3 = std::move(big_obj); // OK.
BigObject&& r4 = r3; // error C2440
f(r3); // error C2668: 'f' : ambiguous call to overloaded function
}
いつ、どこで、なぜ使うべきなのBigObject&& rv = std::move(big_obj);
か?