https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126716
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
--- a/libstdc++-v3/include/bits/erase_if.h
+++ b/libstdc++-v3/include/bits/erase_if.h
@@ -78,7 +78,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
if (__pred(*__iter))
{
- __iter = __cont.erase(__iter);
+ __iter = __ucont.erase(__iter);
++__num;
}
else
Prior to C++23 this works because it finds the erase member in the base class,
but in C++23 the derived debug container has a heterogeneous erase(Kt&&) member
which accepts the base class iterator.
It matches __heterogeneous_hash_key because __heterogeneous_key is true,
because __not_container_iterator<Base::iterator, Derived> is true, because
Base::iterator is not Derived::iterator.