From 33f701dd090a61a82bf1fbe2edf3d37495dc9e8a Mon Sep 17 00:00:00 2001 From: Daniel James Date: Mon, 21 Nov 2016 10:24:51 +0000 Subject: [PATCH] Fix assigning hash/key equality functions for empty containers --- include/boost/unordered/detail/table.hpp | 5 ++++- test/unordered/assign_tests.cpp | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/include/boost/unordered/detail/table.hpp b/include/boost/unordered/detail/table.hpp index 9657c763..1092d31f 100644 --- a/include/boost/unordered/detail/table.hpp +++ b/include/boost/unordered/detail/table.hpp @@ -589,7 +589,10 @@ namespace boost { namespace unordered { namespace detail { mlf_ = x.mlf_; recalculate_max_load(); - if (!size_ && !x.size_) return; + if (!size_ && !x.size_) { + new_func_this.commit(); + return; + } if (x.size_ >= max_load_) { create_buckets(min_buckets_for_size(x.size_)); diff --git a/test/unordered/assign_tests.cpp b/test/unordered/assign_tests.cpp index aa0f579f..0e2f6fdd 100644 --- a/test/unordered/assign_tests.cpp +++ b/test/unordered/assign_tests.cpp @@ -77,7 +77,21 @@ void assign_tests2(T*, test::random_generator generator) BOOST_DEDUCED_TYPENAME T::allocator_type al2(2); typedef BOOST_DEDUCED_TYPENAME T::allocator_type allocator_type; - + + std::cerr<<"assign_tests2.0 - empty container\n"; + { + test::check_instances check_; + + T x1(0, hf1, eq1); + T x2(0, hf2, eq2); + x2 = x1; + BOOST_TEST(test::equivalent(x1.hash_function(), hf1)); + BOOST_TEST(test::equivalent(x1.key_eq(), eq1)); + BOOST_TEST(test::equivalent(x2.hash_function(), hf1)); + BOOST_TEST(test::equivalent(x2.key_eq(), eq1)); + test::check_container(x1, x2); + } + std::cerr<<"assign_tests2.1\n"; { test::check_instances check_;