]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Fix tuple/pair confusion with std::erase_if(flat_map) [PR120465]
authorPatrick Palka <ppalka@redhat.com>
Thu, 29 May 2025 14:11:57 +0000 (10:11 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 29 May 2025 14:11:57 +0000 (10:11 -0400)
commit589b27ec5769410e036df57645ff1eb7c765f692
tree0430cc810a89b808c9563fba80af75bf611a6928
parent8e7cf04d54f5ffb540fdd5406010bb162b9f472b
libstdc++: Fix tuple/pair confusion with std::erase_if(flat_map) [PR120465]

std::erase_if for flat_map/multimap is implemented via ranges::erase_if
over a zip_view of the keys and values, the value_type of which is a
tuple, but the given predicate needs to be called with a pair (flat_map's
value_type).  So use a projection to convert the tuple into a suitable
pair.

PR libstdc++/120465

libstdc++-v3/ChangeLog:

* include/std/flat_map (_Flat_map_impl::_M_erase_if): Use a
projection with ranges::remove_if to pass a pair instead of
a tuple to the predicate.
* testsuite/23_containers/flat_map/1.cc (test07): Strengthen
to expect the argument passed to the predicate is a pair.
* testsuite/23_containers/flat_multimap/1.cc (test07): Likewise.

Co-authored-by: Jonathan Wakely <jwakely@redhat.com>
Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/include/std/flat_map
libstdc++-v3/testsuite/23_containers/flat_map/1.cc
libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc