Наткнулся однажды в книжке на данную фичу, решил погуглить и нашёл больше вопросов, чем ответов.
Собственно вопрос относительно кода в конце статьи, совсем не понял конструкцию
operator std::unique_ptr<T>() const &;
Ну и, собственно, о чём идёт речь в целом:
template <typename T>
class some_type
{
public:
operator std::unique_ptr<T>() const &
{
return std::unique_ptr<T>(new T(*held_)); // Копируем
}
operator std::unique_ptr<T>() &&
{
return std::move(held_); // Отдаем владение
}
private:
std::unique_ptr<T> held_;
};
some_type f();
void g()
{
std::unique_ptr<widget> p = f();
}