بستگی به پیاده سازی کلاستون داره .
ولی اکثر وقت ها استفاده از کد بالا درست نیست
مثلا کد زیر رو در نظر بگیرین
string &&func(){
string a="abc";
return std::move(a);
}
int main()
{
cout<<func();
}
این کد ارور میده شما دارین اشاره گر به حافظه local رو بر کی گردونین که به محض return شدن پاک میشه
درستش اینه که خود string رو با مقدار return کنین.
string func()
در ضمن زمان return تابع خود کامپایلر کد رو RVO می کنه . (return value optimize ) و نیازی به استفاده از move نیست .
http://en.wikipedia.org/wiki/Return_value_optimization