[Bug libstdc++/107850] [12/13 Regression] std::erase_if (map) forces predicate to takes a const value_type

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Nov 25 15:07:50 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107850

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <redi@gcc.gnu.org>:

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

commit r13-4306-gf54ceb2062c7fef294f85ae093914fa6c7ca35b8
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Nov 24 21:09:03 2022 +0000

    libstdc++: Call predicate with non-const values in std::erase_if [PR107850]

    As specified in the standard, the predicate for std::erase_if has to be
    invocable as non-const with a non-const lvalues argument. Restore
    support for predicates that only accept non-const arguments.

    It's not strictly nevessary to change it for the set and unordered_set
    overloads, because they only give const access to the elements anyway.
    I've done it for them too just to keep them all consistent.

    libstdc++-v3/ChangeLog:

            PR libstdc++/107850
            * include/bits/erase_if.h (__erase_nodes_if): Use non-const
            reference to the container.
            * include/experimental/map (erase_if): Likewise.
            * include/experimental/set (erase_if): Likewise.
            * include/experimental/unordered_map (erase_if): Likewise.
            * include/experimental/unordered_set (erase_if): Likewise.
            * include/std/map (erase_if): Likewise.
            * include/std/set (erase_if): Likewise.
            * include/std/unordered_map (erase_if): Likewise.
            * include/std/unordered_set (erase_if): Likewise.
            * testsuite/23_containers/map/erasure.cc: Check with
            const-incorrect predicate.
            * testsuite/23_containers/set/erasure.cc: Likewise.
            * testsuite/23_containers/unordered_map/erasure.cc: Likewise.
            * testsuite/23_containers/unordered_set/erasure.cc: Likewise.
            * testsuite/experimental/map/erasure.cc: Likewise.
            * testsuite/experimental/set/erasure.cc: Likewise.
            * testsuite/experimental/unordered_map/erasure.cc: Likewise.
            * testsuite/experimental/unordered_set/erasure.cc: Likewise.


More information about the Gcc-bugs mailing list