diff --git a/include/boost/unordered/detail/extract_key.hpp b/include/boost/unordered/detail/extract_key.hpp index cba889eb..59fab7c2 100644 --- a/include/boost/unordered/detail/extract_key.hpp +++ b/include/boost/unordered/detail/extract_key.hpp @@ -106,7 +106,7 @@ namespace unordered_detail { { return v.first; } -/* + template static key_type const& extract( std::pair const& v) @@ -120,7 +120,6 @@ namespace unordered_detail { { return v.first; } -*/ #if defined(BOOST_UNORDERED_STD_FORWARD) template diff --git a/test/objects/test.hpp b/test/objects/test.hpp index 63f7c91b..767dbb4a 100644 --- a/test/objects/test.hpp +++ b/test/objects/test.hpp @@ -93,6 +93,10 @@ namespace test return x1.type_ != x2.type_; } }; + + std::size_t hash_value(test::object const& x) { + return hash()(x); + } class less { diff --git a/test/unordered/Jamfile.v2 b/test/unordered/Jamfile.v2 index ee1505f7..ce89396a 100644 --- a/test/unordered/Jamfile.v2 +++ b/test/unordered/Jamfile.v2 @@ -27,6 +27,7 @@ test-suite unordered [ run move_tests.cpp : : : always_show_run_output ] [ run assign_tests.cpp ] [ run insert_tests.cpp ] + [ run insert_range_tests.cpp ] [ run insert_stable_tests.cpp ] [ run unnecessary_copy_tests.cpp ] [ run erase_tests.cpp ] diff --git a/test/unordered/insert_range_tests.cpp b/test/unordered/insert_range_tests.cpp new file mode 100644 index 00000000..ef55cf6b --- /dev/null +++ b/test/unordered/insert_range_tests.cpp @@ -0,0 +1,40 @@ + +// Copyright 2006-2009 Daniel James. +// 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) + +#include +#include +#include +#include "../helpers/test.hpp" +#include "../objects/test.hpp" + +UNORDERED_AUTO_TEST(needless_copies_1) { + std::vector > src; + src.push_back(std::pair(test::object(1, 2), 0)); + + boost::unordered_map dst; + dst[test::object(1, 2)] = 0; + + test::object_count count = test::global_object_count; + dst.insert(src.begin(), src.end()); + BOOST_TEST(count == test::global_object_count); +} + +UNORDERED_AUTO_TEST(needless_copies_2) { + test::object x(1, 2); + std::pair src(x, 0); + + boost::unordered_map dst; + + test::object_count count = test::global_object_count; + dst.emplace(src); + BOOST_TEST(test::global_object_count.instances == count.instances + 1); + BOOST_TEST_EQ(test::global_object_count.constructions, count.constructions + 1); + + count = test::global_object_count; + dst.emplace(src); + BOOST_TEST_EQ(test::global_object_count, count); +} + +RUN_TESTS()