Ответ 1
Они не эквивалентны, и вы всегда должны использовать return t;
.
Более длинная версия заключается в том, что если и только если оператор возврата имеет право на оптимизацию возвращаемого значения, то репатриант связывается с ссылкой rvalue (или в обычном порядке, "move
неявно" ).
Из-за написания return std::move(t);
, вы фактически блокируете оптимизацию возвращаемого значения!