diff options
Diffstat (limited to 'libs/unordered')
-rw-r--r-- | libs/unordered/doc/changes.qbk | 9 | ||||
-rw-r--r-- | libs/unordered/test/objects/minimal.hpp | 65 | ||||
-rw-r--r-- | libs/unordered/test/unordered/compile_map.cpp | 2 | ||||
-rw-r--r-- | libs/unordered/test/unordered/compile_set.cpp | 2 | ||||
-rw-r--r-- | libs/unordered/test/unordered/compile_tests.hpp | 20 |
5 files changed, 80 insertions, 18 deletions
diff --git a/libs/unordered/doc/changes.qbk b/libs/unordered/doc/changes.qbk index f71da60da..af8cf0a5c 100644 --- a/libs/unordered/doc/changes.qbk +++ b/libs/unordered/doc/changes.qbk @@ -257,7 +257,16 @@ C++11 support has resulted in some breaking changes: * Fix the `pointer` typedef in iterators ([ticket 10672]). * Fix Coverity warning ([@https://github.com/boostorg/unordered/pull/2 GitHub #2]). + +[h2 Boost 1.58.0] + +* Remove unnecessary template parameter from const iterators. * Rename private `iterator` typedef in some iterator classes, as it confuses some traits classes. +* Fix move assignment with stateful, propagate_on_container_move_assign + allocators ([ticket 10777]). +* Fix rare exception safety issue in move assignment. +* Fix potential overflow when calculating number of buckets to allocate + ([@https://github.com/boostorg/unordered/pull/4 GitHub #4]). [endsect] diff --git a/libs/unordered/test/objects/minimal.hpp b/libs/unordered/test/objects/minimal.hpp index af7d03873..85132aa3c 100644 --- a/libs/unordered/test/objects/minimal.hpp +++ b/libs/unordered/test/objects/minimal.hpp @@ -19,6 +19,12 @@ #pragma warning(disable:4100) // unreferenced formal parameter #endif +#if !BOOST_WORKAROUND(BOOST_MSVC, == 1500) +#define BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED 1 +#else +#define BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED 0 +#endif + namespace test { namespace minimal @@ -29,7 +35,9 @@ namespace minimal class default_assignable; class assignable; - struct ampersand_operator_used {}; + struct ampersand_operator_used { + ampersand_operator_used() { BOOST_TEST(false); } + }; template <class T> class hash; template <class T> class equal_to; @@ -48,6 +56,7 @@ namespace minimal public: destructible(constructor_param const&) {} ~destructible() {} + void dummy_member() const {} private: destructible(destructible const&); destructible& operator=(destructible const&); @@ -59,6 +68,7 @@ namespace minimal copy_constructible(constructor_param const&) {} copy_constructible(copy_constructible const&) {} ~copy_constructible() {} + void dummy_member() const {} private: copy_constructible& operator=(copy_constructible const&); copy_constructible() {} @@ -78,11 +88,15 @@ namespace minimal { } + void dummy_member() const {} private: copy_constructible_equality_comparable& operator=( copy_constructible_equality_comparable const&); copy_constructible_equality_comparable() {} - ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; bool operator==( @@ -121,9 +135,12 @@ namespace minimal { } - private: + void dummy_member() const {} + +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#endif }; class assignable @@ -133,11 +150,13 @@ namespace minimal assignable(assignable const&) {} assignable& operator=(assignable const&) { return *this; } ~assignable() {} - + void dummy_member() const {} private: assignable() {} - // TODO: This messes up a concept check in the tests. - //ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; struct movable_init {}; @@ -153,6 +172,7 @@ namespace minimal movable1(BOOST_RV_REF(movable1)) {} movable1& operator=(BOOST_RV_REF(movable1)) { return *this; } ~movable1() {} + void dummy_member() const {} }; #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) @@ -164,6 +184,7 @@ namespace minimal movable2(movable2&&) {} ~movable2() {} movable2& operator=(movable2&&) { return *this; } + void dummy_member() const {} private: movable2() {} movable2(movable2 const&); @@ -184,8 +205,10 @@ namespace minimal ~hash() {} std::size_t operator()(T const&) const { return 0; } - private: - ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; template <class T> @@ -199,8 +222,10 @@ namespace minimal ~equal_to() {} bool operator()(T const&, T const&) const { return true; } - private: - ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; template <class T> class ptr; @@ -288,9 +313,10 @@ namespace minimal bool operator>(ptr const& x) const { return ptr_ > x.ptr_; } bool operator<=(ptr const& x) const { return ptr_ <= x.ptr_; } bool operator>=(ptr const& x) const { return ptr_ >= x.ptr_; } - private: - // TODO: - //ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; template <class T> @@ -325,9 +351,10 @@ namespace minimal bool operator>(const_ptr const& x) const { return ptr_ > x.ptr_; } bool operator<=(const_ptr const& x) const { return ptr_ <= x.ptr_; } bool operator>=(const_ptr const& x) const { return ptr_ >= x.ptr_; } - private: - // TODO: - //ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; template <class T> @@ -387,8 +414,10 @@ namespace minimal #else private: allocator& operator=(allocator const&); #endif - private: - ampersand_operator_used operator&() const { return ampersand_operator_used(); } +#if BOOST_UNORDERED_CHECK_ADDR_OPERATOR_NOT_USED + ampersand_operator_used operator&() const { + return ampersand_operator_used(); } +#endif }; template <class T> diff --git a/libs/unordered/test/unordered/compile_map.cpp b/libs/unordered/test/unordered/compile_map.cpp index 317607c73..ebd944eab 100644 --- a/libs/unordered/test/unordered/compile_map.cpp +++ b/libs/unordered/test/unordered/compile_map.cpp @@ -202,6 +202,7 @@ UNORDERED_AUTO_TEST(test2) unordered_unique_test(map, map_value); unordered_map_test(map, assignable, assignable); unordered_copyable_test(map, assignable, map_value, hash, equal_to); + unordered_map_member_test(map, map_value); boost::unordered_map< test::minimal::assignable, @@ -226,6 +227,7 @@ UNORDERED_AUTO_TEST(test2) unordered_equivalent_test(multimap, map_value); unordered_map_test(multimap, assignable, assignable); unordered_copyable_test(multimap, assignable, map_value, hash, equal_to); + unordered_map_member_test(multimap, map_value); } RUN_TESTS() diff --git a/libs/unordered/test/unordered/compile_set.cpp b/libs/unordered/test/unordered/compile_set.cpp index f023c7972..5c622902e 100644 --- a/libs/unordered/test/unordered/compile_set.cpp +++ b/libs/unordered/test/unordered/compile_set.cpp @@ -183,6 +183,7 @@ UNORDERED_AUTO_TEST(test2) unordered_unique_test(set, assignable); unordered_set_test(set, assignable); unordered_copyable_test(set, assignable, assignable, hash, equal_to); + unordered_set_member_test(set, assignable); std::cout<<"Test unordered_multiset.\n"; @@ -195,6 +196,7 @@ UNORDERED_AUTO_TEST(test2) unordered_equivalent_test(multiset, assignable); unordered_set_test(multiset, assignable); unordered_copyable_test(multiset, assignable, assignable, hash, equal_to); + unordered_set_member_test(multiset, assignable); } UNORDERED_AUTO_TEST(movable1_tests) diff --git a/libs/unordered/test/unordered/compile_tests.hpp b/libs/unordered/test/unordered/compile_tests.hpp index b48a6efd0..38d7dda2a 100644 --- a/libs/unordered/test/unordered/compile_tests.hpp +++ b/libs/unordered/test/unordered/compile_tests.hpp @@ -554,3 +554,23 @@ void unordered_movable_test(X& x, Key& k, T& /* t */, Hash& hf, Pred& eq) sink(a8); sink(a10); } + +template <class X, class T> +void unordered_set_member_test(X& x, T& t) +{ + X x1(x); + x1.insert(t); + x1.begin()->dummy_member(); + x1.cbegin()->dummy_member(); +} + +template <class X, class T> +void unordered_map_member_test(X& x, T& t) +{ + X x1(x); + x1.insert(t); + x1.begin()->first.dummy_member(); + x1.cbegin()->first.dummy_member(); + x1.begin()->second.dummy_member(); + x1.cbegin()->second.dummy_member(); +} |