forked from boostorg/unordered
Unordered: Fix overload edge case for piecewise construction.
[SVN r81393]
This commit is contained in:
@ -138,7 +138,7 @@ namespace detail {
|
|||||||
#define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \
|
#define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \
|
||||||
template <typename T2> \
|
template <typename T2> \
|
||||||
static no_key extract(boost::unordered::piecewise_construct_t, \
|
static no_key extract(boost::unordered::piecewise_construct_t, \
|
||||||
namespace_ tuple<> const&, BOOST_FWD_REF(T2)) \
|
namespace_ tuple<> const&, T2 const&) \
|
||||||
{ \
|
{ \
|
||||||
return no_key(); \
|
return no_key(); \
|
||||||
} \
|
} \
|
||||||
@ -146,7 +146,7 @@ namespace detail {
|
|||||||
template <typename T, typename T2> \
|
template <typename T, typename T2> \
|
||||||
static typename is_key<key_type, T>::type \
|
static typename is_key<key_type, T>::type \
|
||||||
extract(boost::unordered::piecewise_construct_t, \
|
extract(boost::unordered::piecewise_construct_t, \
|
||||||
namespace_ tuple<T> const& k, BOOST_FWD_REF(T2)) \
|
namespace_ tuple<T> const& k, T2 const&) \
|
||||||
{ \
|
{ \
|
||||||
return typename is_key<key_type, T>::type( \
|
return typename is_key<key_type, T>::type( \
|
||||||
namespace_ get<0>(k)); \
|
namespace_ get<0>(k)); \
|
||||||
|
@ -698,6 +698,12 @@ derived_from_piecewise_construct_t piecewise_rvalue() {
|
|||||||
return derived_from_piecewise_construct_t();
|
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)
|
UNORDERED_AUTO_TEST(map_emplace_test2)
|
||||||
{
|
{
|
||||||
boost::unordered_map<overloaded_constructor, overloaded_constructor> x;
|
boost::unordered_map<overloaded_constructor, overloaded_constructor> x;
|
||||||
@ -706,7 +712,7 @@ UNORDERED_AUTO_TEST(map_emplace_test2)
|
|||||||
BOOST_TEST(x.find(overloaded_constructor()) != x.end() &&
|
BOOST_TEST(x.find(overloaded_constructor()) != x.end() &&
|
||||||
x.find(overloaded_constructor())->second == overloaded_constructor());
|
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() &&
|
BOOST_TEST(x.find(overloaded_constructor(1)) != x.end() &&
|
||||||
x.find(overloaded_constructor(1))->second == overloaded_constructor());
|
x.find(overloaded_constructor(1))->second == overloaded_constructor());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user