This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
basic_const_iterator
should provide iterator_type
Section: 24.5.3.3 [const.iterators.iterator] Status: New Submitter: Hewill Kang Opened: 2025-04-29 Last modified: 2025-05-04
Priority: Not Prioritized
View other active issues in [const.iterators.iterator].
View all other issues in [const.iterators.iterator].
View all issues with New 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 for
basic_const_iterator
(demo):
#include <iterator>
using I = int*;
using RI = std::reverse_iterator<I>;
using MI = std::move_iterator<I>;
using CI = std::counted_iterator<I>;
using BI = std::basic_const_iterator<I>;
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.
Proposed resolution:
This wording is relative to N5008.
Modify 24.5.3.3 [const.iterators.iterator] as indicated:
namespace std { […] template<input_iterator Iterator> class basic_const_iterator { Iterator current_ = Iterator(); // exposition only using reference = iter_const_reference_t<Iterator>; // exposition only using rvalue-reference = // exposition only iter-const-rvalue-reference-t<Iterator>; public: using iterator_type = I; using iterator_concept = see below; using iterator_category = see below; // not always present using value_type = iter_value_t<Iterator>; using difference_type = iter_difference_t<Iterator>; […] }; }