diff --git a/include/boost/fusion/iterator/advance.hpp b/include/boost/fusion/iterator/advance.hpp index 8cde48db..f62b84b1 100644 --- a/include/boost/fusion/iterator/advance.hpp +++ b/include/boost/fusion/iterator/advance.hpp @@ -19,6 +19,9 @@ namespace boost { namespace fusion { struct random_access_traversal_tag; + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { @@ -38,6 +41,15 @@ namespace boost { namespace fusion BOOST_MPL_ASSERT_NOT((is_same)); }; }; + + template <> + struct advance_impl; + + template <> + struct advance_impl; + + template <> + struct advance_impl; } namespace result_of diff --git a/include/boost/fusion/iterator/deref.hpp b/include/boost/fusion/iterator/deref.hpp index 8236fe5c..c2a40564 100644 --- a/include/boost/fusion/iterator/deref.hpp +++ b/include/boost/fusion/iterator/deref.hpp @@ -13,6 +13,10 @@ namespace boost { namespace fusion { + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + namespace extension { template @@ -21,6 +25,15 @@ namespace boost { namespace fusion template struct apply {}; }; + + template <> + struct deref_impl; + + template <> + struct deref_impl; + + template <> + struct deref_impl; } namespace result_of diff --git a/include/boost/fusion/iterator/distance.hpp b/include/boost/fusion/iterator/distance.hpp index c77a28ab..422a1231 100644 --- a/include/boost/fusion/iterator/distance.hpp +++ b/include/boost/fusion/iterator/distance.hpp @@ -20,6 +20,9 @@ namespace boost { namespace fusion { struct random_access_traversal_tag; + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag namespace extension { @@ -36,6 +39,15 @@ namespace boost { namespace fusion BOOST_MPL_ASSERT_NOT((is_same)); }; }; + + template <> + struct distance_impl; + + template <> + struct distance_impl; + + template <> + struct distance_impl; } namespace result_of diff --git a/include/boost/fusion/iterator/equal_to.hpp b/include/boost/fusion/iterator/equal_to.hpp index 1a559e22..f6cd826c 100644 --- a/include/boost/fusion/iterator/equal_to.hpp +++ b/include/boost/fusion/iterator/equal_to.hpp @@ -17,6 +17,10 @@ namespace boost { namespace fusion { + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + namespace extension { template @@ -28,6 +32,15 @@ namespace boost { namespace fusion : is_same::type, typename add_const::type> {}; }; + + template <> + struct equal_to_impl; + + template <> + struct equal_to_impl; + + template <> + struct equal_to_impl; } namespace result_of diff --git a/include/boost/fusion/iterator/next.hpp b/include/boost/fusion/iterator/next.hpp index 5cefb9d2..aa7f2de8 100644 --- a/include/boost/fusion/iterator/next.hpp +++ b/include/boost/fusion/iterator/next.hpp @@ -12,6 +12,10 @@ namespace boost { namespace fusion { + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + namespace extension { template @@ -20,6 +24,15 @@ namespace boost { namespace fusion template struct apply {}; }; + + template <> + struct next_impl; + + template <> + struct next_impl; + + template <> + struct next_impl; } namespace result_of diff --git a/include/boost/fusion/iterator/prior.hpp b/include/boost/fusion/iterator/prior.hpp index ddfb15ca..0e859d9b 100644 --- a/include/boost/fusion/iterator/prior.hpp +++ b/include/boost/fusion/iterator/prior.hpp @@ -12,6 +12,10 @@ namespace boost { namespace fusion { + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + namespace extension { template @@ -20,6 +24,15 @@ namespace boost { namespace fusion template struct apply {}; }; + + template <> + struct prior_impl; + + template <> + struct prior_impl; + + template <> + struct prior_impl; } namespace result_of diff --git a/include/boost/fusion/iterator/value_of.hpp b/include/boost/fusion/iterator/value_of.hpp index 15d2f812..5a4f6585 100644 --- a/include/boost/fusion/iterator/value_of.hpp +++ b/include/boost/fusion/iterator/value_of.hpp @@ -13,6 +13,10 @@ namespace boost { namespace fusion { + struct array_iterator_tag; // boost::array iterator tag + struct mpl_iterator_tag; // mpl sequence iterator tag + struct std_pair_iterator_tag; // std::pair iterator tag + namespace extension { template @@ -21,6 +25,15 @@ namespace boost { namespace fusion template struct apply {}; }; + + template <> + struct value_of_impl; + + template <> + struct value_of_impl; + + template <> + struct value_of_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/adapted/mpl/tag_of.hpp b/include/boost/fusion/sequence/adapted/mpl/tag_of.hpp index d987c5c2..6dcbea15 100644 --- a/include/boost/fusion/sequence/adapted/mpl/tag_of.hpp +++ b/include/boost/fusion/sequence/adapted/mpl/tag_of.hpp @@ -19,7 +19,7 @@ namespace boost { namespace fusion namespace traits { - template + template struct tag_of >::type> { typedef mpl_sequence_tag type; diff --git a/include/boost/fusion/sequence/intrinsic/at.hpp b/include/boost/fusion/sequence/intrinsic/at.hpp index 62f9f9d4..1eb11198 100644 --- a/include/boost/fusion/sequence/intrinsic/at.hpp +++ b/include/boost/fusion/sequence/intrinsic/at.hpp @@ -15,6 +15,10 @@ namespace boost { namespace fusion { + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag + namespace extension { template @@ -23,6 +27,15 @@ namespace boost { namespace fusion template struct apply; }; + + template <> + struct at_impl; + + template <> + struct at_impl; + + template <> + struct at_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/at_key.hpp b/include/boost/fusion/sequence/intrinsic/at_key.hpp index 1612c47b..9229f5c0 100644 --- a/include/boost/fusion/sequence/intrinsic/at_key.hpp +++ b/include/boost/fusion/sequence/intrinsic/at_key.hpp @@ -15,6 +15,10 @@ namespace boost { namespace fusion { + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag + namespace extension { template @@ -23,6 +27,15 @@ namespace boost { namespace fusion template struct apply; }; + + template <> + struct at_key_impl; + + template <> + struct at_key_impl; + + template <> + struct at_key_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/begin.hpp b/include/boost/fusion/sequence/intrinsic/begin.hpp index b5e94849..b2a616d1 100644 --- a/include/boost/fusion/sequence/intrinsic/begin.hpp +++ b/include/boost/fusion/sequence/intrinsic/begin.hpp @@ -13,6 +13,9 @@ namespace boost { namespace fusion { struct fusion_sequence_tag; + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag namespace extension { @@ -22,6 +25,15 @@ namespace boost { namespace fusion template struct apply; }; + + template <> + struct begin_impl; + + template <> + struct begin_impl; + + template <> + struct begin_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/empty.hpp b/include/boost/fusion/sequence/intrinsic/empty.hpp index 324b5985..d8e17c8c 100644 --- a/include/boost/fusion/sequence/intrinsic/empty.hpp +++ b/include/boost/fusion/sequence/intrinsic/empty.hpp @@ -15,6 +15,7 @@ namespace boost { namespace fusion { struct fusion_sequence_tag; + struct mpl_sequence_tag; // mpl sequence tag namespace extension { @@ -26,6 +27,9 @@ namespace boost { namespace fusion : mpl::bool_<(result_of::size::value == 0)> {}; }; + + template <> + struct empty_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/end.hpp b/include/boost/fusion/sequence/intrinsic/end.hpp index b8ba514c..fcce8e04 100644 --- a/include/boost/fusion/sequence/intrinsic/end.hpp +++ b/include/boost/fusion/sequence/intrinsic/end.hpp @@ -13,6 +13,9 @@ namespace boost { namespace fusion { struct fusion_sequence_tag; + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag namespace extension { @@ -22,6 +25,15 @@ namespace boost { namespace fusion template struct apply; }; + + template <> + struct end_impl; + + template <> + struct end_impl; + + template <> + struct end_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/has_key.hpp b/include/boost/fusion/sequence/intrinsic/has_key.hpp index 24190fb0..b0962afa 100644 --- a/include/boost/fusion/sequence/intrinsic/has_key.hpp +++ b/include/boost/fusion/sequence/intrinsic/has_key.hpp @@ -16,6 +16,9 @@ namespace boost { namespace fusion { struct void_; struct fusion_sequence_tag; + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag namespace extension { @@ -28,6 +31,15 @@ namespace boost { namespace fusion template meta_at_impl::type, void_> > {}; }; + + template <> + struct has_key_impl; + + template <> + struct has_key_impl; + + template <> + struct has_key_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/size.hpp b/include/boost/fusion/sequence/intrinsic/size.hpp index c9fe923b..a79f824a 100644 --- a/include/boost/fusion/sequence/intrinsic/size.hpp +++ b/include/boost/fusion/sequence/intrinsic/size.hpp @@ -23,6 +23,15 @@ namespace boost { namespace fusion template struct apply : Sequence::size {}; }; + + template <> + struct size_impl; + + template <> + struct size_impl; + + template <> + struct size_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/value_at.hpp b/include/boost/fusion/sequence/intrinsic/value_at.hpp index de518391..cd589429 100644 --- a/include/boost/fusion/sequence/intrinsic/value_at.hpp +++ b/include/boost/fusion/sequence/intrinsic/value_at.hpp @@ -13,6 +13,10 @@ namespace boost { namespace fusion { + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag + namespace extension { template @@ -21,6 +25,15 @@ namespace boost { namespace fusion template struct apply; }; + + template <> + struct value_at_impl; + + template <> + struct value_at_impl; + + template <> + struct value_at_impl; } namespace result_of diff --git a/include/boost/fusion/sequence/intrinsic/value_at_key.hpp b/include/boost/fusion/sequence/intrinsic/value_at_key.hpp index a6c8aeec..51fc88c2 100644 --- a/include/boost/fusion/sequence/intrinsic/value_at_key.hpp +++ b/include/boost/fusion/sequence/intrinsic/value_at_key.hpp @@ -14,6 +14,10 @@ namespace boost { namespace fusion { + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag + namespace extension { template @@ -22,6 +26,15 @@ namespace boost { namespace fusion template struct apply; }; + + template <> + struct value_at_key_impl; + + template <> + struct value_at_key_impl; + + template <> + struct value_at_key_impl; } namespace result_of diff --git a/include/boost/fusion/support/category_of.hpp b/include/boost/fusion/support/category_of.hpp index 9502b21e..7aebc9ac 100644 --- a/include/boost/fusion/support/category_of.hpp +++ b/include/boost/fusion/support/category_of.hpp @@ -13,7 +13,11 @@ #include namespace boost { namespace fusion -{ +{ + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag + namespace extension { template @@ -24,6 +28,15 @@ namespace boost { namespace fusion : detail::fusion_category_of {}; }; + + template <> + struct category_of_impl; + + template <> + struct category_of_impl; + + template <> + struct category_of_impl; } namespace traits diff --git a/include/boost/fusion/support/is_associative.hpp b/include/boost/fusion/support/is_associative.hpp index 4cda074a..ae339f25 100644 --- a/include/boost/fusion/support/is_associative.hpp +++ b/include/boost/fusion/support/is_associative.hpp @@ -12,25 +12,26 @@ #include #include -namespace boost { namespace fusion { +namespace boost { namespace fusion +{ namespace extension { - template - struct is_associative_impl - { - template - struct apply - : mpl::false_ - {}; - }; + template + struct is_associative_impl + { + template + struct apply : mpl::false_ {}; + }; } namespace traits { - template - struct is_associative - : extension::is_associative_impl::type>::template apply - {}; -}}} + template + struct is_associative + : extension::is_associative_impl::type>:: + template apply + {}; + } +}} #endif diff --git a/include/boost/fusion/support/is_sequence.hpp b/include/boost/fusion/support/is_sequence.hpp index 539fd396..86ed6f77 100644 --- a/include/boost/fusion/support/is_sequence.hpp +++ b/include/boost/fusion/support/is_sequence.hpp @@ -18,10 +18,13 @@ namespace boost { namespace fusion { struct non_fusion_tag; + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag namespace extension { - template + template struct is_sequence_impl : is_base_and_derived { @@ -31,19 +34,29 @@ namespace boost { namespace fusion {}; }; - template<> + template <> struct is_sequence_impl { template struct apply : mpl::false_ {}; }; + + template <> + struct is_sequence_impl; + + template <> + struct is_sequence_impl; + + template <> + struct is_sequence_impl; } namespace traits { template struct is_sequence - : extension::is_sequence_impl::type>::template apply + : extension::is_sequence_impl::type>:: + template apply {}; } }} diff --git a/include/boost/fusion/support/is_view.hpp b/include/boost/fusion/support/is_view.hpp index e95038c8..e1a03add 100644 --- a/include/boost/fusion/support/is_view.hpp +++ b/include/boost/fusion/support/is_view.hpp @@ -13,6 +13,10 @@ namespace boost { namespace fusion { + struct array_tag; // boost::array tag + struct mpl_sequence_tag; // mpl sequence tag + struct std_pair_tag; // std::pair tag + namespace extension { template @@ -23,6 +27,15 @@ namespace boost { namespace fusion : detail::fusion_is_view {}; }; + + template <> + struct is_view_impl; + + template <> + struct is_view_impl; + + template <> + struct is_view_impl; } namespace traits @@ -32,6 +45,7 @@ namespace boost { namespace fusion extension::is_view_impl::type>:: template apply::type {}; -}}} + } +}} #endif diff --git a/include/boost/fusion/support/tag_of.hpp b/include/boost/fusion/support/tag_of.hpp index d5701136..0fbb47a6 100644 --- a/include/boost/fusion/support/tag_of.hpp +++ b/include/boost/fusion/support/tag_of.hpp @@ -10,8 +10,16 @@ #include #include +#include #include #include +#include + +namespace boost +{ + template + class array; // forward +} namespace boost { namespace fusion { @@ -30,11 +38,20 @@ namespace boost { namespace fusion typedef non_fusion_tag type; }; - template + template struct tag_of >::type> { typedef typename Sequence::fusion_tag type; }; + + template + struct tag_of >; + + template + struct tag_of >::type>; + + template + struct tag_of >; } namespace detail