Boost
  C++ Libraries
  
  ...one of the most highly
  regarded and expertly designed C++ library projects in the
  world.
 — Herb Sutter and Andrei
  Alexandrescu, C++
  Coding Standards
boost::make_variant_over — Exposes a variant whose bounded types are the
          elements of the given type sequence.
// In header: <boost/variant/variant.hpp> template<typename Sequence> class make_variant_over { public: // types typedef variant< unspecified > type; };
type has behavior equivalent in every respect to
          variant< Sequence[0], Sequence[1], ... >
          (where Sequence[i] denotes the
          i-th element of Sequence), except
          that no upper limit is imposed on the number of types.
Notes:
Sequence must meet the requirements of
            MPL's Sequence
            concept.make_variant_over may not be supported on your
            compiler. See
            BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT
            for more information.