Предположим, что у функции есть следующий прототип
template<typename T>
std::unique_ptr<T> process_object(std::unique_ptr<T> ptr);
Функция может возвращать (перемещенную версию) переданный ей объект или полностью другой объект.
Является ли это законным С++ для использования этой функции следующим образом?
std::unique_ptr<Widget> pw(new Widget());
pw = process_object(std::move(pw));
Если я правильно помню, есть правило C/С++, которое запрещает модификацию объекта более одного раза в одном полном выражении. Применяется ли это правило? Если да, есть ли способ выразить эту идиому по-разному в одной строке?
Что, если заменить std::unique_ptr
на презренный std::auto_ptr
?