Re-implement ordered_map::erase,

so that it can handle pair<const Key,...>
This commit is contained in:
gatopeich 2020-06-23 15:01:20 +01:00
parent acd748e16f
commit fb8c11f25c
3 changed files with 22 additions and 8 deletions

View file

@ -46,7 +46,14 @@ struct ordered_map : Container
{
if (it->first == key)
{
Container::erase(it);
// Since we cannot move const Keys, re-construct them in place
for (auto next = it; ++next != this->end(); ++it)
{
// *it = std::move(*next); // deleted
it->~value_type(); // Destroy but keep allocation
new (&*it) value_type{std::move(*next)};
}
Container::pop_back();
return 1;
}
}

View file

@ -15915,7 +15915,14 @@ struct ordered_map : Container
{
if (it->first == key)
{
Container::erase(it);
// Since we cannot move const Keys, re-construct them in place
for (auto next = it; ++next != this->end(); ++it)
{
// *it = std::move(*next); // deleted
it->~value_type(); // Destroy but keep allocation
new (&*it) value_type{std::move(*next)};
}
Container::pop_back();
return 1;
}
}