[gcc r17-62] libstdc+: Provide iterator type for basic_const_iterator.
Tomasz Kaminski
tkaminsk@gcc.gnu.org
Fri Apr 24 09:29:24 GMT 2026
https://gcc.gnu.org/g:799e24adedd761e257815c77fff1d19efdd0220c
commit r17-62-g799e24adedd761e257815c77fff1d19efdd0220c
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date: Fri Apr 24 10:40:19 2026 +0200
libstdc+: Provide iterator type for basic_const_iterator.
This resolves LWG 4253, "basic_const_iterator should provide iterator_type"
which was approved in Kona 2025.
libstdc++-v3/ChangeLog:
* include/bits/stl_iterator.h (basic_const_iterator::iterator_type):
Define.
* testsuite/24_iterators/const_iterator/1.cc: Tests for
iterator_type.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
Diff:
---
libstdc++-v3/include/bits/stl_iterator.h | 3 +++
libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc | 2 ++
2 files changed, 5 insertions(+)
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index f16f591ad635..6439deb608a6 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -2691,6 +2691,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<input_iterator _It2> friend class basic_const_iterator;
public:
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4253. basic_const_iterator should provide iterator_type
+ using iterator_type = _It;
using iterator_concept = decltype(_S_iter_concept());
using value_type = iter_value_t<_It>;
using difference_type = iter_difference_t<_It>;
diff --git a/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc b/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
index f2bcad4f09c9..7f791ddbef97 100644
--- a/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
+++ b/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc
@@ -29,6 +29,7 @@ test01()
else
{
using Wrapped = std::basic_const_iterator<Iter>;
+ static_assert( std::same_as<typename Wrapped::iterator_type, Iter> );
static_assert( std::same_as<std::const_iterator<Iter>, Wrapped> );
static_assert( std::same_as<std::const_sentinel<Iter>, Wrapped> );
@@ -64,6 +65,7 @@ test02()
{
static_assert( !ranges::constant_range<Range> );
using Wrapped = std::basic_const_iterator<ranges::iterator_t<Range>>;
+ static_assert( std::same_as<typename Wrapped::iterator_type, ranges::iterator_t<Range>> );
if constexpr (Constable)
{
More information about the Libstdc++-cvs
mailing list