Когда требуется явное перемещение для оператора 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??

Ответы на вопрос(1)

Ваш ответ на вопрос