mirror of
https://github.com/boostorg/unordered.git
synced 2025-07-31 11:57:15 +02:00
Fix bug in hint-based overload for node_type insertion where elements were erroneously reallocated
This commit is contained in:
@ -422,8 +422,16 @@ namespace boost {
|
|||||||
|
|
||||||
BOOST_ASSERT(get_allocator() == nh.get_allocator());
|
BOOST_ASSERT(get_allocator() == nh.get_allocator());
|
||||||
|
|
||||||
auto itp = table_.insert(map_types::move(nh.element()));
|
typename map_types::element_type x;
|
||||||
|
x.p = std::addressof(nh.element());
|
||||||
|
|
||||||
|
auto itp = table_.insert(std::move(x));
|
||||||
|
if (itp.second) {
|
||||||
|
nh.reset();
|
||||||
return itp.first;
|
return itp.first;
|
||||||
|
} else {
|
||||||
|
return itp.first;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class M>
|
template <class M>
|
||||||
|
@ -410,8 +410,16 @@ namespace boost {
|
|||||||
|
|
||||||
BOOST_ASSERT(get_allocator() == nh.get_allocator());
|
BOOST_ASSERT(get_allocator() == nh.get_allocator());
|
||||||
|
|
||||||
auto itp = table_.insert(set_types::move(nh.element()));
|
typename set_types::element_type x;
|
||||||
|
x.p=std::addressof(nh.element());
|
||||||
|
|
||||||
|
auto itp = table_.insert(std::move(x));
|
||||||
|
if (itp.second) {
|
||||||
|
nh.reset();
|
||||||
return itp.first;
|
return itp.first;
|
||||||
|
} else {
|
||||||
|
return itp.first;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
|
Reference in New Issue
Block a user