Jakie jest uzasadnienie wdrożenia boost :: none_t?

Boost.Optional używa typu atrapy, aby umożliwić tworzenie niezainicjowanych instancjiboost::optional<T>. Ten typ jest nazywanynone_ti przykładnone jest już zdefiniowany w nagłówku dla wygody, co pozwala nam pisać kod, taki jak poniżej:

boost::optional<int> uninitialized(boost::none);

Patrząc na definicjęnone_t, Zauważyłem, że w rzeczywistości jest to typedef odpowiadający wskaźnikowi do elementu do jakiejś sztucznej struktury:

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

Jakie są zalety używania tak zwiniętego typedefu w stosunku do prostej pustej struktury takiej jak ta?

namespace boost {

struct none_t {};

none_t const none;

} // namespace boost

questionAnswers(1)

yourAnswerToTheQuestion