diff --git a/include/boost/fusion/support/detail/is_trivially_copyable.hpp b/include/boost/fusion/support/detail/is_trivially_copyable.hpp index 87ef244b..24258d7c 100644 --- a/include/boost/fusion/support/detail/is_trivially_copyable.hpp +++ b/include/boost/fusion/support/detail/is_trivially_copyable.hpp @@ -26,6 +26,8 @@ # include # include # include +# include +# include # include # include # include @@ -46,6 +48,7 @@ #ifndef BOOST_NO_CXX11_HDR_TYPE_TRAITS # define BOOST_FUSION_DETAIL_IS_TRIVIALLY_COPYABLE_CONFORMING 2 #elif defined(BOOST_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_DECLTYPE) && \ + defined(BOOST_IS_UNION) && defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) && \ defined(BOOST_HAS_TRIVIAL_ASSIGN) && defined(BOOST_HAS_TRIVIAL_COPY) && \ defined(BOOST_HAS_TRIVIAL_MOVE_ASSIGN) && defined(BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR) && \ defined(BOOST_HAS_TRIVIAL_DESTRUCTOR) && defined(BOOST_TT_IS_CONSTRUCTIBLE_CONFORMING) @@ -77,7 +80,11 @@ struct is_trivially_copyable_impl #else , mpl::true_ #endif - , is_trivially_copyable_class::type> >::type { }; + , typename mpl::if_c::value || is_union::value + , is_trivially_copyable_class::type> + , mpl::false_ + >::type + >::type { }; #endif // template diff --git a/test/support/is_trivially_copyable.cpp b/test/support/is_trivially_copyable.cpp index 9474d92a..ae58f15d 100644 --- a/test/support/is_trivially_copyable.cpp +++ b/test/support/is_trivially_copyable.cpp @@ -83,20 +83,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -189,20 +189,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -265,20 +265,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -341,20 +341,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -438,20 +438,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -535,20 +535,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)) BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -631,20 +631,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)) BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); @@ -727,20 +727,20 @@ BOOST_MPL_ASSERT((is_trivially_copyable)) BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); BOOST_FUSION_ASSERT_WA((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); -//BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); +BOOST_MPL_ASSERT_NOT((is_trivially_copyable)); #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES BOOST_MPL_ASSERT_NOT((is_trivially_copyable));