Qual é a razão para implementar boost :: none_t?
Boost.Optional usa um tipo fictício para permitir a construção de instâncias não inicializadas deboost::optional<T>
. Esse tipo é chamadonone_t
e uma instâncianone
já está definido em um cabeçalho por conveniência, permitindo escrever código como o seguinte:
boost::optional<int> uninitialized(boost::none);
Olhando para a definição denone_t
, Notei que é de fato um typedef correspondente a um ponteiro para membro de alguma estrutura fictícia:
namespace boost {
namespace detail { struct none_helper{}; }
typedef int detail::none_helper::*none_t ;
none_t const none = (static_cast<none_t>(0)) ;
} // namespace boost
Quais são as vantagens de usar um typedef tão complicado sobre uma estrutura vazia simples como essa?
namespace boost {
struct none_t {};
none_t const none;
} // namespace boost