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