diff --git a/include/boost/unordered/unordered_set.hpp b/include/boost/unordered/unordered_set.hpp index bd191e30..c66fef7e 100644 --- a/include/boost/unordered/unordered_set.hpp +++ b/include/boost/unordered/unordered_set.hpp @@ -1015,6 +1015,15 @@ namespace boost { return node_type(table_.extract_by_key(k), table_.node_alloc()); } + template + typename boost::enable_if_c< + detail::transparent_non_iterable::value, + node_type>::type + extract(const Key& k) + { + return node_type(table_.extract_by_key_impl(k), table_.node_alloc()); + } + iterator insert(BOOST_RV_REF(node_type) np) { return table_.move_insert_node_type_equiv(np); diff --git a/test/unordered/transparent_tests.cpp b/test/unordered/transparent_tests.cpp index 9f7a129c..59fb48d7 100644 --- a/test/unordered/transparent_tests.cpp +++ b/test/unordered/transparent_tests.cpp @@ -1461,6 +1461,26 @@ transparent_unordered_set::node_type set_extract_const_overload_compile_test() return set.extract(c); } +transparent_unordered_multiset::node_type +multiset_extract_overload_compile_test() +{ + convertible_to_iterator c; + transparent_unordered_multiset set; + transparent_unordered_multiset::iterator pos = set.begin(); + pos = c; + return set.extract(c); +} + +transparent_unordered_multiset::node_type +multiset_extract_const_overload_compile_test() +{ + convertible_to_const_iterator c; + transparent_unordered_multiset set; + transparent_unordered_multiset::const_iterator pos = set.begin(); + pos = c; + return set.extract(c); +} + template void test_set_transparent_extract() { typedef typename UnorderedSet::node_type node_type; @@ -1735,6 +1755,7 @@ void test_unordered_multiset() test_set_transparent_find(); test_set_transparent_erase(); test_set_transparent_equal_range(); + test_set_transparent_extract(); } { @@ -1746,6 +1767,7 @@ void test_unordered_multiset() test_set_non_transparent_find(); test_set_non_transparent_erase(); test_set_non_transparent_equal_range(); + test_set_non_transparent_extract(); } { @@ -1758,6 +1780,7 @@ void test_unordered_multiset() test_set_non_transparent_find(); test_set_non_transparent_erase(); test_set_non_transparent_equal_range(); + test_set_non_transparent_extract(); } { @@ -1770,6 +1793,7 @@ void test_unordered_multiset() test_set_non_transparent_find(); test_set_non_transparent_erase(); test_set_non_transparent_equal_range(); + test_set_non_transparent_extract(); } }