Что мне делать, чтобы инициализировать boost::optional< T >
, если базовый тип T
не является конструируемым по умолчанию, не копируемым/перемещаемым, но его экземпляр все еще может существовать?
Запрещено ли для boost::optional
по каким-либо семантическим причинам иметь какую-либо функцию-член, такую как template< typename... Args > boost::optional< T >::construct(Args && ...args)
, которая передает все аргументы на месте operator new
для полного построения объекта (для не-ref-типа T
)? Вариант состоит в том, чтобы иметь функцию, не являющуюся членом, например std::make_shared< T >
.
Мне кажется, что мою проблему можно решить с помощью std::unique_ptr
/std::shared_ptr
, но в данном случае мой вопрос: "Почему boost::optional
прогресс завис?".