// Copyright 2017 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt #ifdef TEST_STD # include #else # include #endif #include #include "test.hpp" #include "check_integral_constant.hpp" #include struct X { }; struct Y { Y( Y const& ) {} }; struct Z { Z& operator=( Z const& ) { return *this; } }; struct V { V( V const& ) {} V& operator=( V const& ) { return *this; } }; void swap( V&, V& ) BOOST_NOEXCEPT {} struct U { }; void swap(U&, U&) {} TT_TEST_BEGIN(is_nothrow_swappable) BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); #if defined(BOOST_NO_SFINAE_EXPR) || defined(BOOST_NO_CXX11_NOEXCEPT) || defined(BOOST_NO_CXX11_DECLTYPE) || defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) \ || BOOST_WORKAROUND(BOOST_GCC, < 40700)\ || (defined(__GLIBCXX__) && __GLIBCXX__ <= 20120301) // built-in clang++ -std=c++11 on Travis, w/ libstdc++ 4.6 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); #else BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); #endif BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); #if defined(BOOST_NO_SFINAE_EXPR) || defined(BOOST_NO_CXX11_NOEXCEPT) || defined(BOOST_NO_CXX11_DECLTYPE) || defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) \ || BOOST_WORKAROUND(BOOST_GCC, < 40700)\ || (defined(__GLIBCXX__) && __GLIBCXX__ <= 20120301) // built-in clang++ -std=c++11 on Travis, w/ libstdc++ 4.6 BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); #else BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, true); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT(::tt::is_nothrow_swappable::value, false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable >::value), true); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable const>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable volatile>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable const volatile>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable >::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable const>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable volatile>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable const volatile>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable >::value), true); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable const>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable volatile>::value), false); BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_nothrow_swappable const volatile>::value), false); #endif TT_TEST_END