From a3d35e61fe2005fa519342ef73682df1bb58ba53 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 13 Jan 2021 04:51:27 +0200 Subject: [PATCH] g++ 4.7 doesn't have std::is_trivially_destructible --- include/boost/variant2/variant.hpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/include/boost/variant2/variant.hpp b/include/boost/variant2/variant.hpp index 7a4a2cf..f0c6d47 100644 --- a/include/boost/variant2/variant.hpp +++ b/include/boost/variant2/variant.hpp @@ -504,11 +504,23 @@ using std::is_trivially_move_assignable; #endif +#if defined( BOOST_LIBSTDCXX_VERSION ) && BOOST_LIBSTDCXX_VERSION < 40800 + +template struct is_trivially_destructible: std::has_trivial_destructor +{ +}; + +#else + +using std::is_trivially_destructible; + +#endif + // variant_storage template union variant_storage_impl; -template using variant_storage = variant_storage_impl...>, T...>; +template using variant_storage = variant_storage_impl...>, T...>; template union variant_storage_impl { @@ -807,7 +819,7 @@ template using resolve_overload_index = mp11::mp_find struct variant_base_impl; -template using variant_base = variant_base_impl...>::value, mp11::mp_all...>::value, T...>; +template using variant_base = variant_base_impl...>::value, mp11::mp_all...>::value, T...>; struct none {}; @@ -1317,7 +1329,7 @@ template struct v template using variant_ca_base = variant_ca_base_impl< mp11::mp_all..., std::is_copy_assignable...>::value, - mp11::mp_all..., detail::is_trivially_copy_constructible..., detail::is_trivially_copy_assignable...>::value, + mp11::mp_all..., detail::is_trivially_copy_constructible..., detail::is_trivially_copy_assignable...>::value, T...>; template struct variant_ca_base_impl: public variant_cc_base @@ -1466,7 +1478,7 @@ template struct v template using variant_ma_base = variant_ma_base_impl< mp11::mp_all..., std::is_move_assignable...>::value, - mp11::mp_all..., detail::is_trivially_move_constructible..., detail::is_trivially_move_assignable...>::value, + mp11::mp_all..., detail::is_trivially_move_constructible..., detail::is_trivially_move_assignable...>::value, T...>; template struct variant_ma_base_impl: public variant_mc_base @@ -2085,7 +2097,7 @@ template struct visit_L2 template auto operator()( I ) const -> Vret { auto f2 = bind_front( std::forward(f), unsafe_get( std::forward(v1) ) ); - return visit( f2, std::forward(v2) ); + return visit( f2, std::forward(v2) ); } };