diff --git a/include/boost/unordered/detail/extract_key.hpp b/include/boost/unordered/detail/extract_key.hpp index 969cd6ae..fd3141f0 100644 --- a/include/boost/unordered/detail/extract_key.hpp +++ b/include/boost/unordered/detail/extract_key.hpp @@ -138,7 +138,7 @@ namespace detail { #define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \ template \ static no_key extract(boost::unordered::piecewise_construct_t, \ - namespace_ tuple<> const&, BOOST_FWD_REF(T2)) \ + namespace_ tuple<> const&, T2 const&) \ { \ return no_key(); \ } \ @@ -146,7 +146,7 @@ namespace detail { template \ static typename is_key::type \ extract(boost::unordered::piecewise_construct_t, \ - namespace_ tuple const& k, BOOST_FWD_REF(T2)) \ + namespace_ tuple const& k, T2 const&) \ { \ return typename is_key::type( \ namespace_ get<0>(k)); \ diff --git a/test/unordered/insert_tests.cpp b/test/unordered/insert_tests.cpp index a789bf01..9fc75580 100644 --- a/test/unordered/insert_tests.cpp +++ b/test/unordered/insert_tests.cpp @@ -698,6 +698,12 @@ derived_from_piecewise_construct_t piecewise_rvalue() { return derived_from_piecewise_construct_t(); } +struct convertible_to_piecewise { + operator boost::unordered::piecewise_construct_t() const { + return boost::unordered::piecewise_construct; + } +}; + UNORDERED_AUTO_TEST(map_emplace_test2) { boost::unordered_map x; @@ -706,7 +712,7 @@ UNORDERED_AUTO_TEST(map_emplace_test2) BOOST_TEST(x.find(overloaded_constructor()) != x.end() && x.find(overloaded_constructor())->second == overloaded_constructor()); - x.emplace(boost::unordered::piecewise_construct, boost::make_tuple(1), boost::make_tuple()); + x.emplace(convertible_to_piecewise(), boost::make_tuple(1), boost::make_tuple()); BOOST_TEST(x.find(overloaded_constructor(1)) != x.end() && x.find(overloaded_constructor(1))->second == overloaded_constructor());