Was ist der Grund für die Implementierung von boost :: none_t?

Boost.Optional verwendet einen Dummy-Typ, um nicht initialisierte Instanzen von zu erstellenboost::optional<T>. Dieser Typ heißtnone_tund eine Instanznone ist der Einfachheit halber bereits in einem Header definiert, sodass wir folgenden Code schreiben können:

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

Betrachtet man die Definition vonnone_t, Ich habe festgestellt, dass es sich tatsächlich um eine typedef handelt, die einem Zeiger auf ein Mitglied einer Dummy-Struktur entspricht:

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

Was sind die Vorteile einer solchen verschachtelten Typdefinition gegenüber einer einfachen leeren Struktur wie dieser?

namespace boost {

struct none_t {};

none_t const none;

} // namespace boost

Antworten auf die Frage(1)

Ihre Antwort auf die Frage