diff --git a/include/boost/fusion/sequence/comparison/enable_comparison.hpp b/include/boost/fusion/sequence/comparison/enable_comparison.hpp index 12794177..b65c7552 100644 --- a/include/boost/fusion/sequence/comparison/enable_comparison.hpp +++ b/include/boost/fusion/sequence/comparison/enable_comparison.hpp @@ -20,13 +20,13 @@ namespace boost { namespace fusion { namespace traits { template struct enable_equality - : mpl::or_, traits::is_sequence > + : mpl::and_, traits::is_sequence > {}; template struct enable_comparison : mpl::and_< - mpl::or_, traits::is_sequence > + traits::is_sequence, traits::is_sequence , mpl::equal_to, result_of::size > > {}; diff --git a/test/sequence/comparison.hpp b/test/sequence/comparison.hpp index 2dfe6550..2c954d0a 100644 --- a/test/sequence/comparison.hpp +++ b/test/sequence/comparison.hpp @@ -8,6 +8,20 @@ #include #include +struct not_a_fusion_container {}; +template +inline bool operator==(not_a_fusion_container, T const&) { return true; } +template +inline bool operator!=(not_a_fusion_container, T const&) { return true; } +template +inline bool operator<(not_a_fusion_container, T const&) { return true; } +template +inline bool operator<=(not_a_fusion_container, T const&) { return true; } +template +inline bool operator>(not_a_fusion_container, T const&) { return true; } +template +inline bool operator>=(not_a_fusion_container, T const&) { return true; } + void equality_test() { @@ -28,6 +42,9 @@ equality_test() BOOST_TEST(!(v1 == v5)); BOOST_TEST(v5 != v1); BOOST_TEST(!(v5 == v1)); + + BOOST_TEST(not_a_fusion_container() == v1); + BOOST_TEST(not_a_fusion_container() != v1); } void @@ -51,6 +68,11 @@ ordering_test() FUSION_SEQUENCE v5(5, 'a', true); v1 >= v5; #endif + + BOOST_TEST(not_a_fusion_container() > v1); + BOOST_TEST(not_a_fusion_container() >= v1); + BOOST_TEST(not_a_fusion_container() < v1); + BOOST_TEST(not_a_fusion_container() <= v1); }