diff --git a/include/boost/fusion/support/tag_of.hpp b/include/boost/fusion/support/tag_of.hpp index c7cfbb76..a1ccf12d 100644 --- a/include/boost/fusion/support/tag_of.hpp +++ b/include/boost/fusion/support/tag_of.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -45,6 +46,39 @@ namespace boost { namespace fusion namespace detail { BOOST_MPL_HAS_XXX_TRAIT_DEF(fusion_tag) + + template + struct is_specialized + : mpl::false_ + {}; + + template < + class T0, class T1, class T2, class T3, class T4, + class T5, class T6, class T7, class T8, class T9 + > + struct is_specialized > + : mpl::true_ + {}; + + template + struct is_specialized > + : mpl::true_ + {}; + + template <> + struct is_specialized + : mpl::true_ + {}; + + template + struct is_specialized > + : mpl::true_ + {}; + + template + struct is_specialized > + : mpl::true_ + {}; } namespace traits @@ -54,31 +88,15 @@ namespace boost { namespace fusion : mpl::if_< detail::is_mpl_sequence, mpl::identity, mpl::identity >::type - { }; + { + BOOST_MPL_ASSERT_NOT((detail::is_specialized)); + }; template struct tag_of >::type> { typedef typename Sequence::fusion_tag type; }; - - template < - class T0, class T1, class T2, class T3, class T4, - class T5, class T6, class T7, class T8, class T9 - > - struct tag_of >; - - template - struct tag_of >; - - template <> - struct tag_of; - - template - struct tag_of >; - - template - struct tag_of >; } namespace detail