[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