williamr@2: williamr@2: // (C) Copyright Eric Friedman 2002-2003. williamr@2: // Distributed under the Boost Software License, Version 1.0. (See williamr@2: // accompanying file LICENSE_1_0.txt or copy at williamr@2: // http://www.boost.org/LICENSE_1_0.txt) williamr@2: // williamr@2: // See http://www.boost.org for most recent version including documentation. williamr@2: williamr@2: #ifndef BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED williamr@2: #define BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED williamr@2: williamr@2: #include "boost/config.hpp" // for STATIC_CONSTANT williamr@2: #include "boost/variant/detail/has_trivial_move.hpp" williamr@2: #include "boost/type_traits/has_nothrow_copy.hpp" williamr@2: #include "boost/type_traits/has_nothrow_assign.hpp" williamr@2: williamr@2: #include "boost/mpl/and.hpp" williamr@2: #include "boost/mpl/or.hpp" williamr@2: williamr@2: // should be the last #include williamr@2: #include "boost/variant/detail/bool_trait_def.hpp" williamr@2: williamr@2: namespace boost { williamr@2: namespace detail { namespace variant { williamr@2: williamr@2: // TRAIT: has_nothrow_move williamr@2: williamr@2: template williamr@2: struct has_nothrow_move_impl williamr@2: { williamr@2: BOOST_STATIC_CONSTANT( williamr@2: bool, value = ( williamr@2: ::boost::mpl::or_< williamr@2: has_trivial_move williamr@2: , ::boost::mpl::and_< williamr@2: has_nothrow_copy williamr@2: , has_nothrow_assign williamr@2: > williamr@2: >::type::value williamr@2: ) williamr@2: ); williamr@2: }; williamr@2: williamr@2: BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( williamr@2: has_nothrow_move williamr@2: , T williamr@2: , (::boost::detail::variant::has_nothrow_move_impl::value) williamr@2: ) williamr@2: williamr@2: williamr@2: // TRAIT: has_nothrow_move_constructor williamr@2: williamr@2: template williamr@2: struct has_nothrow_move_constructor_impl williamr@2: { williamr@2: BOOST_STATIC_CONSTANT( williamr@2: bool, value = ( williamr@2: ::boost::mpl::or_< williamr@2: has_nothrow_move williamr@2: , has_trivial_move_constructor williamr@2: , has_nothrow_copy williamr@2: >::type::value williamr@2: ) williamr@2: ); williamr@2: }; williamr@2: williamr@2: BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( williamr@2: has_nothrow_move_constructor williamr@2: , T williamr@2: , (::boost::detail::variant::has_nothrow_move_constructor_impl::value) williamr@2: ) williamr@2: williamr@2: williamr@2: // TRAIT: has_nothrow_move_assign williamr@2: williamr@2: template williamr@2: struct has_nothrow_move_assign_impl williamr@2: { williamr@2: BOOST_STATIC_CONSTANT( williamr@2: bool, value = ( williamr@2: ::boost::mpl::or_< williamr@2: has_nothrow_move williamr@2: , has_trivial_move_assign williamr@2: , has_nothrow_assign williamr@2: >::type::value williamr@2: ) williamr@2: ); williamr@2: }; williamr@2: williamr@2: BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( williamr@2: has_nothrow_move_assign williamr@2: , T williamr@2: , (::boost::detail::variant::has_nothrow_move_assign_impl::value) williamr@2: ) williamr@2: williamr@2: }} // namespace detail::variant williamr@2: williamr@2: BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move) williamr@2: BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_constructor) williamr@2: BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_assign) williamr@2: williamr@2: } // namespace boost williamr@2: williamr@2: #include "boost/variant/detail/bool_trait_undef.hpp" williamr@2: williamr@2: #endif // BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED