]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Check presence of iterator_category for flat_sets insert_range [PR119415]
authorTomasz Kamiński <tkaminsk@redhat.com>
Wed, 26 Mar 2025 06:34:37 +0000 (07:34 +0100)
committerTomasz Kamiński <tkaminsk@redhat.com>
Wed, 26 Mar 2025 10:53:26 +0000 (11:53 +0100)
commit272d26d519f5abcca71f5b1d5acc07319e480ba3
tree095849baa85733424c32f81031080b543d2cef11
parent2b4122c4165e23365dfcacb7df3b59900fa8e644
libstdc++: Check presence of iterator_category for flat_sets insert_range [PR119415]

As pointed out by Hewill Kang (reporter) in the issue, checking if iterator
of the incoming range satisfies __cpp17_input_iterator, may still lead
to hard errors inside of insert_range for iterators that satisfies
that concept, but specialize iterator_traits without iterator_category
typedef (std::common_iterator specialize iterator_traits without
iterator_category in some cases).

To address that we instead check if the iterator_traits<It>::iterator_category
is present and denote at least input_iterator_tag, using existing __has_input_iter_cat.

PR libstdc++/119415

libstdc++-v3/ChangeLog:

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

Reviewed-by: 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