Use boost::is_nothrow_swappable, now that it's available everywhere

This commit is contained in:
Daniel James
2018-01-27 09:38:19 +00:00
parent c01a8c4629
commit 09be9bae04
5 changed files with 86 additions and 80 deletions
+58 -35
View File
@@ -17,11 +17,12 @@
#endif
#include "../helpers/check_return_type.hpp"
#include <boost/limits.hpp>
#include <boost/core/pointer_traits.hpp>
#include <boost/limits.hpp>
#include <boost/predef.h>
#include <boost/static_assert.hpp>
#include <boost/type_traits/cv_traits.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/swap.hpp>
@@ -286,36 +287,47 @@ template <class X, class Key> void unordered_set_test(X& r, Key const&)
BOOST_STATIC_ASSERT((boost::is_same<iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type const,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<iterator>::difference_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<iterator>::element_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<std::ptrdiff_t, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
iterator>::difference_type>::value));
// pointer_traits<const_iterator>
BOOST_STATIC_ASSERT((boost::is_same<const_iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((
boost::is_same<const_iterator, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
const_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type const,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_iterator>::difference_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<std::ptrdiff_t, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
const_iterator>::difference_type>::value));
// pointer_traits<local_iterator>
BOOST_STATIC_ASSERT((boost::is_same<local_iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<local_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((
boost::is_same<local_iterator, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
local_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type const,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<local_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<local_iterator>::difference_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<local_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<std::ptrdiff_t, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
local_iterator>::difference_type>::value));
// pointer_traits<const_local_iterator>
BOOST_STATIC_ASSERT((boost::is_same<const_local_iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_local_iterator>::pointer>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_local_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type const,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_local_iterator>::element_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_local_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_local_iterator>::difference_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_local_iterator>::difference_type>::value));
typedef BOOST_DEDUCED_TYPENAME X::node_type node_type;
typedef BOOST_DEDUCED_TYPENAME node_type::value_type node_value_type;
@@ -366,37 +378,48 @@ void unordered_map_test(X& r, Key const& k, T const& v)
BOOST_STATIC_ASSERT((boost::is_same<iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<iterator>::difference_type>::value));
BOOST_STATIC_ASSERT(
(boost::is_same<value_type, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
iterator>::element_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<std::ptrdiff_t, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
iterator>::difference_type>::value));
// pointer_traits<const_iterator>
BOOST_STATIC_ASSERT((boost::is_same<const_iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((
boost::is_same<const_iterator, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
const_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type const,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_iterator>::difference_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<std::ptrdiff_t, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
const_iterator>::difference_type>::value));
// pointer_traits<local_iterator>
BOOST_STATIC_ASSERT((boost::is_same<local_iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<local_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<local_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<local_iterator>::difference_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<local_iterator, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
local_iterator>::pointer>::value));
BOOST_STATIC_ASSERT(
(boost::is_same<value_type, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
local_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((
boost::is_same<std::ptrdiff_t, BOOST_DEDUCED_TYPENAME boost::pointer_traits<
local_iterator>::difference_type>::value));
// pointer_traits<const_local_iterator>
BOOST_STATIC_ASSERT((boost::is_same<const_local_iterator,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_local_iterator>::pointer>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_local_iterator>::pointer>::value));
BOOST_STATIC_ASSERT((boost::is_same<value_type const,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_local_iterator>::element_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_local_iterator>::element_type>::value));
BOOST_STATIC_ASSERT((boost::is_same<std::ptrdiff_t,
BOOST_DEDUCED_TYPENAME boost::pointer_traits<const_local_iterator>::difference_type>::value));
BOOST_DEDUCED_TYPENAME
boost::pointer_traits<const_local_iterator>::difference_type>::value));
typedef BOOST_DEDUCED_TYPENAME X::node_type node_type;
typedef BOOST_DEDUCED_TYPENAME node_type::key_type node_key_type;
+5 -8
View File
@@ -165,13 +165,12 @@ namespace noexcept_tests {
!boost::is_nothrow_move_constructible<hash_possible_exception>::value);
BOOST_TEST(
!boost::is_nothrow_move_assignable<hash_possible_exception>::value);
BOOST_TEST(!boost::unordered::detail::is_nothrow_swappable<
hash_possible_exception>::value);
BOOST_TEST(!boost::is_nothrow_swappable<hash_possible_exception>::value);
BOOST_TEST((!boost::is_nothrow_move_constructible<
equal_to_nothrow<false, false, false> >::value));
BOOST_TEST((!boost::is_nothrow_move_assignable<
equal_to_nothrow<false, false, false> >::value));
BOOST_TEST((!boost::unordered::detail::is_nothrow_swappable<
BOOST_TEST((!boost::is_nothrow_swappable<
equal_to_nothrow<false, false, false> >::value));
have_is_nothrow_move =
@@ -179,7 +178,7 @@ namespace noexcept_tests {
have_is_nothrow_move_assign =
boost::is_nothrow_move_assignable<hash_nothrow_move_assign>::value;
have_is_nothrow_swap =
boost::unordered::detail::is_nothrow_swappable<hash_nothrow_swap>::value;
boost::is_nothrow_swappable<hash_nothrow_swap>::value;
// Check that the traits work when expected.
#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && \
@@ -191,8 +190,7 @@ namespace noexcept_tests {
#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_NOEXCEPT) && \
!defined(BOOST_NO_CXX11_DECLTYPE) && \
!defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS)
// TODO: Turn test on when unordered starts to use is_nothrow_swap
// BOOST_TEST(have_is_nothrow_swap);
BOOST_TEST(have_is_nothrow_swap);
#endif
BOOST_LIGHTWEIGHT_TEST_OSTREAM
@@ -286,8 +284,7 @@ namespace noexcept_tests {
throwing_set;
if (have_is_nothrow_swap) {
BOOST_TEST(
boost::unordered::detail::is_nothrow_swappable<throwing_set>::value);
BOOST_TEST(boost::is_nothrow_swappable<throwing_set>::value);
}
throwing_test_exception = false;