]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Correctly implement LWG 3946 changes to const_iterator_t [PR122842]
authorPatrick Palka <ppalka@redhat.com>
Fri, 28 Nov 2025 20:38:04 +0000 (15:38 -0500)
committerPatrick Palka <ppalka@redhat.com>
Fri, 28 Nov 2025 20:38:04 +0000 (15:38 -0500)
commit2d3142c00934c419755c17dd85ecdb0e72f249d1
treec25d6f77701044ef104880fd338f5ba26aa0fd78
parent1ff32875e93be6617e093c0ef1413d506c58f045
libstdc++: Correctly implement LWG 3946 changes to const_iterator_t [PR122842]

LWG 3946 made const_iterator_t/sentinel_t agree with ranges::cbegin/cend
by defining the aliases in terms of the CPOs, but I defined it the other
way around in an incorrect way that made the aliases not consider
range-ness of const T via __possibly_const_range.  This patch
reimplements the proposed resolution in a more obviously correct way,
mirroring the wording.

PR libstdc++/122842

libstdc++-v3/ChangeLog:

* include/bits/ranges_base.h (__access:_CBegin): Define in
terms of const_iterator directly, not const_iterator_t.
(__access::_CEnd): Likewise in terms of const_sentinel vs
const_sentinel_t.
(const_iterator_t): Move down definition and define in terms
of ranges::cbegin as per LWG 3946.
(const_sentinel_t): Likewise in terms of ranges::cend.
* testsuite/24_iterators/const_iterator/1.cc (test02): Correct
test for int[], std::array and std::vector.  Also test
std::string.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/include/bits/ranges_base.h
libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc