Issue 4253: basic_const_iterator should provide iterator_type (original) (raw)


This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.

4253. basic_const_iterator should provide iterator_type

Section: 24.5.3.3 [const.iterators.iterator] Status: WP Submitter: Hewill Kang Opened: 2025-04-29 Last modified: 2025-11-11

Priority: Not Prioritized

View all other issues in [const.iterators.iterator].

View all issues with WP status.

Discussion:

Currently, iterator adaptors in <iterator> that wrap a single iterator such as reverse_iterator, move_iterator, and counted_iterator all provide a public iterator_type member for users to access the underlying iterator type, except forbasic_const_iterator (demo):

#include

using I = int*; using RI = std::reverse_iterator; using MI = std::move_iterator; using CI = std::counted_iterator; using BI = std::basic_const_iterator;

static_assert(std::same_as<RI::iterator_type, I>); static_assert(std::same_as<MI::iterator_type, I>); static_assert(std::same_as<CI::iterator_type, I>); static_assert(std::same_as<BI::iterator_type, I>); // error

It seems reasonable to add one for basic_const_iterator for consistency.

[2025-06-12; Reflector poll]

Set status to Tentatively Ready after eight votes in favour during reflector poll.

[Kona 2025-11-08; Status changed: Voting → WP.]

Proposed resolution:

This wording is relative to N5008.

  1. Modify 24.5.3.3 [const.iterators.iterator] as indicated:

    namespace std {
    […]
    template
    class basic_const_iterator {
    Iterator current = Iterator(); // exposition only
    using reference = iter_const_reference_t; // exposition only
    using rvalue-reference = // exposition only
    iter-const-rvalue-reference-t;

public:
using iterator_type = Iterator;
using iterator_concept = see below;
using iterator_category = see below; // not always present
using value_type = iter_value_t;
using difference_type = iter_difference_t;
[…]
};
}