24 #ifndef MISC_GENERIC_VARIANT_HH
25 # define MISC_GENERIC_VARIANT_HH
27 # include <boost/variant.hpp>
28 # include <boost/preprocessor/repetition/repeat_from_to.hpp>
34 # define MISC_GENERIC_VARIANT_AUX_DECLARE_PARAMS_IMPL(z, N, T) \
35 typename BOOST_PP_CAT(T, N) = BOOST_PP_CAT(boost::detail::variant::void, N)
37 # define MISC_GENERIC_VARIANT_AUX_DECLARE_PARAMS \
39 BOOST_VARIANT_LIMIT_TYPES \
40 , MISC_GENERIC_VARIANT_AUX_DECLARE_PARAMS_IMPL \
46 # define BOOST_VARIANT_DETAIL_DEFINE_VOID_N(z, N, _) \
47 struct BOOST_PP_CAT(void, N); \
50 struct convert_void< BOOST_PP_CAT(void, N) > \
52 typedef mpl::na type; \
62 BOOST_VARIANT_LIMIT_TYPES
70 # undef BOOST_VARIANT_DETAIL_DEFINE_VOID_N
81 template < MISC_GENERIC_VARIANT_AUX_DECLARE_PARAMS >
82 class generic_variant;
86 # undef MISC_GENERIC_VARIANT_AUX_DECLARE_PARAMS_IMPL
87 # undef MISC_GENERIC_VARIANT_AUX_DECLARE_PARAMS
91 # define MISC_GENERIC_VARIANT_CONVERSION_OPERATOR_DECL(z, N, T) \
92 operator BOOST_PP_CAT(T,N) & ();
93 # define MISC_GENERIC_VARIANT_CONST_CONVERSION_OPERATOR_DECL(z, N, T) \
94 operator const BOOST_PP_CAT(T,N) & () const;
110 template <
typename T0_, BOOST_VARIANT_ENUM_SHIFTED_PARAMS(
typename T)>
112 public boost::variant<T0_, BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T)>
119 typedef boost::variant<T0_, BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T)>
138 , BOOST_VARIANT_LIMIT_TYPES
146 operator const T0_& () const;
149 , BOOST_VARIANT_LIMIT_TYPES
158 # undef MISC_GENERIC_VARIANT_CONST_CONVERSION_OPERATOR_DECL
159 # undef MISC_GENERIC_VARIANT_CONVERSION_OPERATOR_DECL
163 #endif // !MISC_GENERIC_VARIANT_HH