У меня есть класс TTempTable
с семантикой перемещения. я написал
TTempTable&& MyFunction() {
TTempTable tmp = f(...);
...
return std::move(tmp);
}
и не получил ошибок компилятора.
Было ли это правильно?
Нет, это неправильно.
Вы возврат ссылки на локальную переменную. Эта ссылка болтается.
Как и любая зависшая вещь, компилятор не [всегда] будет диагностировать ее за вас.
Возврат по значению и удаление std::move
(это избыточно и препятствует элизии).
Взгляните на это правило в основных рекомендациях C++