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.

Reply via email to