]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Fix handling of common cpp20-only ranges for flat sets [PR119415]
authorTomasz Kamiński <tkaminsk@redhat.com>
Mon, 24 Mar 2025 17:04:28 +0000 (18:04 +0100)
committerTomasz Kamiński <tkaminsk@redhat.com>
Tue, 25 Mar 2025 09:24:58 +0000 (10:24 +0100)
commit4d1b19695669e6c67b9c3df07673bc22cae3a662
treef9c578ba3740a04a83c6751d3f4300c32731e517
parent698e337bec3a36230c72816fcb82f1a239e64eba
libstdc++: Fix handling of common cpp20-only ranges for flat sets [PR119415]

These patch add check to verify if common range iterators satisfies
Cpp17LegacyIterator requirements (__detail::__cpp17_input_iterator),
before invoking overloads of insert that accepts two iterators.
As such overloads existed before c++20 iterators were introduced,
they commonly assume existence of iterator_traits<..>::iterator_category,
and passing a cpp20-only iterators, leads to hard errors.

In case if user-defined container wants to support more efficient
insertion in such cases, it should provided insert_range method,
as in the case of standard containers.

PR libstdc++/119415

libstdc++-v3/ChangeLog:

* include/std/flat_set (_Flat_set_impl:insert_range):
Add __detail::__cpp17_input_iterator check.
* testsuite/23_containers/flat_multiset/1.cc: New tests
* testsuite/23_containers/flat_set/1.cc: New tests

Reviewed-by: Patrick Palka <ppalka@redhat.com>, Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
libstdc++-v3/include/std/flat_set
libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc
libstdc++-v3/testsuite/23_containers/flat_set/1.cc