[gcc r16-6895] libstdc++: Fix std::erase_if for std::string with -D_GLIBCXX_USE_CXX11_ABI=0.

Tomasz Kaminski tkaminsk@gcc.gnu.org
Mon Jan 19 09:18:30 GMT 2026


https://gcc.gnu.org/g:e9a62938be080e1d849f6b1e013633584ecace9b

commit r16-6895-ge9a62938be080e1d849f6b1e013633584ecace9b
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date:   Mon Jan 19 10:03:08 2026 +0100

    libstdc++: Fix std::erase_if for std::string with -D_GLIBCXX_USE_CXX11_ABI=0.
    
    The __cow_string used with -D_GLIBCXX_USE_CXX11_ABI=0, does not provide
    erase accepting const_iterator, so we adjust  __detail::__erase.if
    (introduced in r16-6889-g3287) to call __cont.erase with mutable iterators.
    
    libstdc++-v3/ChangeLog:
    
            * include/bits/erase_if.h (__detail::__erase_if): Pass mutable
            iterators to __cont.erase.

Diff:
---
 libstdc++-v3/include/bits/erase_if.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/include/bits/erase_if.h b/libstdc++-v3/include/bits/erase_if.h
index d5a5278d1282..9d14b63a289b 100644
--- a/libstdc++-v3/include/bits/erase_if.h
+++ b/libstdc++-v3/include/bits/erase_if.h
@@ -58,8 +58,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 					  std::move(__pred));
 	if (__removed != __end)
 	  {
-	    __cont.erase(__niter_wrap(__cont.cbegin(), __removed),
-			 __cont.cend());
+	    __cont.erase(__niter_wrap(__cont.begin(), __removed),
+			 __cont.end());
 	    return __osz - __ucont.size();
 	  }


More information about the Libstdc++-cvs mailing list