Когда требуется явное перемещение для оператора return?
Вкомментарий к другому вопросу Джонатан Уэйкли отвечает на мое заявление:
Вам никогда не нужно явно перемещать возвращаемое значение функции локальной переменной. Это'неявное движение туда->
... никогда не говори никогда ... Вам нужно явное перемещение, если локальная переменная не совпадает с типом возвращаемого значения, напримерstd::unique_ptr f() { auto p = std::make_unique(); p->foo(); return p; }
, но если типы одинаковы, он будет двигаться, если это возможно ...
Так что иногда кажется, что мы можемдолжен переместить локальную переменную по возвращении.
Пример
std::unique_ptr f() {
auto p = std::make_unique();
p->foo();
return p;
}
приятно в том, что это даетошибка компиляции
> prog.cpp:10:14: error: cannot convert ‘p’ from type
> ‘std::unique_ptr’ to type ‘std::unique_ptr&&’
но я'мне интересно, есть ли хороший шанс обнаружить это вообще - иэто здесь лимит языковых правил илиunique_ptr
??