mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-17 14:22:13 +02:00
ODR safe code
[SVN r35275]
This commit is contained in:
@ -19,6 +19,9 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct random_access_traversal_tag;
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
@ -38,6 +41,15 @@ namespace boost { namespace fusion
|
|||||||
BOOST_MPL_ASSERT_NOT((is_same<category, random_access_traversal_tag>));
|
BOOST_MPL_ASSERT_NOT((is_same<category, random_access_traversal_tag>));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct advance_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct advance_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct advance_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -21,6 +25,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
struct apply {};
|
struct apply {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct deref_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct deref_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct deref_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -20,6 +20,9 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct random_access_traversal_tag;
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
@ -36,6 +39,15 @@ namespace boost { namespace fusion
|
|||||||
BOOST_MPL_ASSERT_NOT((is_same<first_category, random_access_traversal_tag>));
|
BOOST_MPL_ASSERT_NOT((is_same<first_category, random_access_traversal_tag>));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct distance_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct distance_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct distance_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -17,6 +17,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -28,6 +32,15 @@ namespace boost { namespace fusion
|
|||||||
: is_same<typename add_const<I1>::type, typename add_const<I2>::type>
|
: is_same<typename add_const<I1>::type, typename add_const<I2>::type>
|
||||||
{};
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct equal_to_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct equal_to_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct equal_to_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -12,6 +12,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -20,6 +24,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
struct apply {};
|
struct apply {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct next_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct next_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct next_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -12,6 +12,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -20,6 +24,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
struct apply {};
|
struct apply {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct prior_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct prior_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct prior_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -21,6 +25,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
struct apply {};
|
struct apply {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_of_impl<array_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_of_impl<mpl_iterator_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_of_impl<std_pair_iterator_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -19,7 +19,7 @@ namespace boost { namespace fusion
|
|||||||
|
|
||||||
namespace traits
|
namespace traits
|
||||||
{
|
{
|
||||||
template<typename Sequence>
|
template <typename Sequence>
|
||||||
struct tag_of<Sequence, typename boost::enable_if<detail::is_mpl_sequence<Sequence> >::type>
|
struct tag_of<Sequence, typename boost::enable_if<detail::is_mpl_sequence<Sequence> >::type>
|
||||||
{
|
{
|
||||||
typedef mpl_sequence_tag type;
|
typedef mpl_sequence_tag type;
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -23,6 +27,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence, typename N>
|
template <typename Sequence, typename N>
|
||||||
struct apply;
|
struct apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct at_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct at_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct at_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -23,6 +27,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence, typename Key>
|
template <typename Sequence, typename Key>
|
||||||
struct apply;
|
struct apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct at_key_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct at_key_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct at_key_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct fusion_sequence_tag;
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
@ -22,6 +25,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
struct apply;
|
struct apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct begin_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct begin_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct begin_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct fusion_sequence_tag;
|
struct fusion_sequence_tag;
|
||||||
|
struct mpl_sequence_tag; // mpl sequence tag
|
||||||
|
|
||||||
namespace extension
|
namespace extension
|
||||||
{
|
{
|
||||||
@ -26,6 +27,9 @@ namespace boost { namespace fusion
|
|||||||
: mpl::bool_<(result_of::size<Sequence>::value == 0)>
|
: mpl::bool_<(result_of::size<Sequence>::value == 0)>
|
||||||
{};
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct empty_impl<mpl_sequence_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct fusion_sequence_tag;
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
@ -22,6 +25,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
struct apply;
|
struct apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct end_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct end_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct end_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -16,6 +16,9 @@ namespace boost { namespace fusion
|
|||||||
{
|
{
|
||||||
struct void_;
|
struct void_;
|
||||||
struct fusion_sequence_tag;
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
@ -28,6 +31,15 @@ namespace boost { namespace fusion
|
|||||||
template meta_at_impl<Key>::type, void_> >
|
template meta_at_impl<Key>::type, void_> >
|
||||||
{};
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct has_key_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct has_key_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct has_key_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -23,6 +23,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
struct apply : Sequence::size {};
|
struct apply : Sequence::size {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct size_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct size_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct size_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -21,6 +25,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence, typename N>
|
template <typename Sequence, typename N>
|
||||||
struct apply;
|
struct apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_at_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_at_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_at_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -14,6 +14,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template <typename Tag>
|
template <typename Tag>
|
||||||
@ -22,6 +26,15 @@ namespace boost { namespace fusion
|
|||||||
template <typename Sequence, typename N>
|
template <typename Sequence, typename N>
|
||||||
struct apply;
|
struct apply;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_at_key_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_at_key_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct value_at_key_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -13,7 +13,11 @@
|
|||||||
#include <boost/fusion/support/tags.hpp>
|
#include <boost/fusion/support/tags.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template<typename Tag>
|
template<typename Tag>
|
||||||
@ -24,6 +28,15 @@ namespace boost { namespace fusion
|
|||||||
: detail::fusion_category_of<T>
|
: detail::fusion_category_of<T>
|
||||||
{};
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct category_of_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct category_of_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct category_of_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace traits
|
namespace traits
|
||||||
|
@ -12,25 +12,26 @@
|
|||||||
#include <boost/mpl/bool.hpp>
|
#include <boost/mpl/bool.hpp>
|
||||||
#include <boost/fusion/support/tag_of.hpp>
|
#include <boost/fusion/support/tag_of.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion {
|
namespace boost { namespace fusion
|
||||||
|
{
|
||||||
namespace extension
|
namespace extension
|
||||||
{
|
{
|
||||||
template<typename Tag>
|
template<typename Tag>
|
||||||
struct is_associative_impl
|
struct is_associative_impl
|
||||||
{
|
{
|
||||||
template<typename Seq>
|
template<typename Seq>
|
||||||
struct apply
|
struct apply : mpl::false_ {};
|
||||||
: mpl::false_
|
};
|
||||||
{};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace traits
|
namespace traits
|
||||||
{
|
{
|
||||||
template <typename Seq>
|
template <typename Seq>
|
||||||
struct is_associative
|
struct is_associative
|
||||||
: extension::is_associative_impl<typename detail::tag_of<Seq>::type>::template apply<Seq>
|
: extension::is_associative_impl<typename detail::tag_of<Seq>::type>::
|
||||||
{};
|
template apply<Seq>
|
||||||
}}}
|
{};
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,10 +18,13 @@
|
|||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
struct non_fusion_tag;
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template<typename T>
|
template <typename T>
|
||||||
struct is_sequence_impl
|
struct is_sequence_impl
|
||||||
: is_base_and_derived<sequence_root, T>
|
: is_base_and_derived<sequence_root, T>
|
||||||
{
|
{
|
||||||
@ -31,19 +34,29 @@ namespace boost { namespace fusion
|
|||||||
{};
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template <>
|
||||||
struct is_sequence_impl<non_fusion_tag>
|
struct is_sequence_impl<non_fusion_tag>
|
||||||
{
|
{
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct apply : mpl::false_ {};
|
struct apply : mpl::false_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_sequence_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_sequence_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_sequence_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace traits
|
namespace traits
|
||||||
{
|
{
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct is_sequence
|
struct is_sequence
|
||||||
: extension::is_sequence_impl<typename detail::tag_of<T>::type>::template apply<T>
|
: extension::is_sequence_impl<typename detail::tag_of<T>::type>::
|
||||||
|
template apply<T>
|
||||||
{};
|
{};
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
namespace boost { namespace fusion
|
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
|
namespace extension
|
||||||
{
|
{
|
||||||
template<typename Tag>
|
template<typename Tag>
|
||||||
@ -23,6 +27,15 @@ namespace boost { namespace fusion
|
|||||||
: detail::fusion_is_view<T>
|
: detail::fusion_is_view<T>
|
||||||
{};
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_view_impl<array_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_view_impl<mpl_sequence_tag>;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct is_view_impl<std_pair_tag>;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace traits
|
namespace traits
|
||||||
@ -32,6 +45,7 @@ namespace boost { namespace fusion
|
|||||||
extension::is_view_impl<typename detail::tag_of<T>::type>::
|
extension::is_view_impl<typename detail::tag_of<T>::type>::
|
||||||
template apply<T>::type
|
template apply<T>::type
|
||||||
{};
|
{};
|
||||||
}}}
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,8 +10,16 @@
|
|||||||
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
#include <boost/type_traits/remove_const.hpp>
|
||||||
#include <boost/fusion/support/tag_of_fwd.hpp>
|
#include <boost/fusion/support/tag_of_fwd.hpp>
|
||||||
|
#include <boost/fusion/support/detail/is_mpl_sequence.hpp>
|
||||||
#include <boost/mpl/has_xxx.hpp>
|
#include <boost/mpl/has_xxx.hpp>
|
||||||
#include <boost/utility/enable_if.hpp>
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
class array; // forward
|
||||||
|
}
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -30,11 +38,20 @@ namespace boost { namespace fusion
|
|||||||
typedef non_fusion_tag type;
|
typedef non_fusion_tag type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Sequence>
|
template <typename Sequence>
|
||||||
struct tag_of<Sequence, typename boost::enable_if<detail::has_fusion_tag<Sequence> >::type>
|
struct tag_of<Sequence, typename boost::enable_if<detail::has_fusion_tag<Sequence> >::type>
|
||||||
{
|
{
|
||||||
typedef typename Sequence::fusion_tag type;
|
typedef typename Sequence::fusion_tag type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
struct tag_of<boost::array<T, N> >;
|
||||||
|
|
||||||
|
template <typename Sequence>
|
||||||
|
struct tag_of<Sequence, typename boost::enable_if<detail::is_mpl_sequence<Sequence> >::type>;
|
||||||
|
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
struct tag_of<std::pair<T1, T2> >;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace detail
|
namespace detail
|
||||||
|
Reference in New Issue
Block a user