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>
Showing
- libstdc++-v3/include/std/flat_map 12 additions, 5 deletionslibstdc++-v3/include/std/flat_map
- libstdc++-v3/include/std/flat_set 24 additions, 3 deletionslibstdc++-v3/include/std/flat_set
- libstdc++-v3/testsuite/23_containers/flat_map/1.cc 17 additions, 0 deletionslibstdc++-v3/testsuite/23_containers/flat_map/1.cc
- libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc 16 additions, 0 deletionslibstdc++-v3/testsuite/23_containers/flat_multimap/1.cc
- libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc 16 additions, 0 deletionslibstdc++-v3/testsuite/23_containers/flat_multiset/1.cc
- libstdc++-v3/testsuite/23_containers/flat_set/1.cc 16 additions, 0 deletionslibstdc++-v3/testsuite/23_containers/flat_set/1.cc
Loading
Please register or sign in to comment