diff options
author | Patrick Palka <ppalka@redhat.com> | 2025-01-31 15:53:12 -0500 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2025-01-31 15:53:12 -0500 |
commit | a9172b107a24b244e0b71c2575dd6448d48b3ae3 (patch) | |
tree | 15f8c5d536a6fd64e0f4670f0f91205d54f32c2b /gcc | |
parent | ee797739606ce9b8cf6ebb0236977861e49aa0d1 (diff) | |
download | gcc-a9172b107a24b244e0b71c2575dd6448d48b3ae3.zip gcc-a9172b107a24b244e0b71c2575dd6448d48b3ae3.tar.gz gcc-a9172b107a24b244e0b71c2575dd6448d48b3ae3.tar.bz2 |
libstdc++: Fix flat_foo::insert_range for non-common ranges [PR118156]
This fixes flat_map/multimap::insert_range by just generalizing the
insert implementation to handle heterogenous iterator/sentinel pair.
I'm not sure we can do better than this, e.g. we can't implement it in
terms of the adapted containers' insert_range because that'd require two
passes over the range.
For flat_set/multiset, we can implement insert_range directly in terms
of the adapted container's insert_range. A fallback implementation
is also provided if insert_range isn't available, as is the case for
std::deque currently.
PR libstdc++/118156
libstdc++-v3/ChangeLog:
* include/std/flat_map (_Flat_map_impl::_M_insert): Generalized
version of insert taking heterogenous iterator/sentinel pair.
(_Flat_map_impl::insert): Dispatch to _M_insert.
(_Flat_map_impl::insert_range): Likewise.
(flat_map): Export _Flat_map_impl::insert_range.
(flat_multimap): Likewise.
* include/std/flat_set (_Flat_set_impl::insert_range):
Reimplement directly, not in terms of insert.
(flat_set): Export _Flat_set_impl::insert_range.
(flat_multiset): Likewise.
* testsuite/23_containers/flat_map/1.cc (test06): New test.
* testsuite/23_containers/flat_multimap/1.cc (test06): New test.
* testsuite/23_containers/flat_multiset/1.cc (test06): New test.
* testsuite/23_containers/flat_set/1.cc (test06): New test.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions