summaryrefslogtreecommitdiff
path: root/libs/unordered
diff options
context:
space:
mode:
Diffstat (limited to 'libs/unordered')
-rw-r--r--libs/unordered/doc/changes.qbk9
-rw-r--r--libs/unordered/test/objects/minimal.hpp65
-rw-r--r--libs/unordered/test/unordered/compile_map.cpp2
-rw-r--r--libs/unordered/test/unordered/compile_set.cpp2
-rw-r--r--libs/unordered/test/unordered/compile_tests.hpp20
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();
+}