В чем смысл реализации boost::none_t?

Boost.Optionalиспользует фиктивный тип, позволяющий создавать неинициализированные экземпляры boost::Optional. Этот тип называется none_t, а экземпляр noneуже определен в заголовке для удобства, что позволяет нам писать следующий код:

boost::optional uninitialized(boost::none);

Глядя на определение none_t, я заметил, что на самом деле это typedef, соответствующий указателю на член какой-то фиктивной структуры:

namespace boost {

namespace detail { struct none_helper{}; }

typedef int detail::none_helper::*none_t ;

none_t const none = (static_cast(0)) ;

} // namespace boost

Каковы преимущества использования такого сложного typedef по сравнению с такой простой пустой структурой?

namespace boost {

struct none_t {};

none_t const none;

} // namespace boost

24
задан Luc Touraille 19 June 2013 в 13:20
поделиться