Index: boost/spirit/home/qi/detail/pass_container.hpp =================================================================== --- boost/spirit/home/qi/detail/pass_container.hpp (Revision 86236) +++ boost/spirit/home/qi/detail/pass_container.hpp (Arbeitskopie) @@ -198,6 +198,21 @@ // We pass through the container attribute if at least one of the embedded // types in the variant requires to pass through the attribute +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(BOOST_VARIANT_USE_VARIADIC_TEMPLATES) + template + struct pass_through_container, Sequence> + : pass_through_container + {}; + + template + struct pass_through_container, Sequence> + : mpl::bool_::type::value || + pass_through_container, Sequence>::type::value> + {}; +#else #define BOOST_SPIRIT_PASS_THROUGH_CONTAINER(z, N, _) \ pass_through_container::type::value || \ @@ -219,6 +234,7 @@ {}; #undef BOOST_SPIRIT_PASS_THROUGH_CONTAINER +#endif }}}} /////////////////////////////////////////////////////////////////////////////// Index: boost/spirit/home/support/attributes.hpp =================================================================== --- boost/spirit/home/support/attributes.hpp (Revision 86236) +++ boost/spirit/home/support/attributes.hpp (Arbeitskopie) @@ -202,6 +202,19 @@ struct is_weak_substitute > : is_weak_substitute {}; +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(BOOST_VARIANT_USE_VARIADIC_TEMPLATES) + template + struct is_weak_substitute, Expected> + : is_weak_substitute + {}; + + template + struct is_weak_substitute, + Expected> + : mpl::bool_::type::value && + is_weak_substitute, Expected>::type::value> + {}; +#else #define BOOST_SPIRIT_IS_WEAK_SUBSTITUTE(z, N, _) \ is_weak_substitute::type::value && \ /***/ @@ -220,6 +233,7 @@ {}; #undef BOOST_SPIRIT_IS_WEAK_SUBSTITUTE +#endif template struct is_weak_substitute {}; +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(BOOST_VARIANT_USE_VARIADIC_TEMPLATES) + template + struct is_container< boost::variant > + : is_container + {}; + + template + struct is_container< boost::variant > + : mpl::bool_::value || + is_container< boost::variant >::value> {}; + +#else #define BOOST_SPIRIT_IS_CONTAINER(z, N, data) \ is_container::value || \ /***/ @@ -76,6 +88,7 @@ {}; #undef BOOST_SPIRIT_IS_CONTAINER +#endif template struct is_iterator_range Index: boost/spirit/home/support/detail/as_variant.hpp =================================================================== --- boost/spirit/home/support/detail/as_variant.hpp (Revision 86236) +++ boost/spirit/home/support/detail/as_variant.hpp (Arbeitskopie) @@ -30,6 +30,8 @@ template struct as_variant_impl; +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(BOOST_VARIANT_USE_VARIADIC_TEMPLATES) +#else template <> struct as_variant_impl<0> { @@ -39,6 +41,7 @@ typedef variant<> type; }; }; +#endif #define BOOST_FUSION_NEXT_ITERATOR(z, n, data) \ typedef typename fusion::result_of::next::type \