Title
`basic_const_iterator` should provide `iterator_type`
Status
new
Section
[const.iterators.iterator]
Submitter
Hewill Kang

Created on 2025-04-29.00:00:00 last changed 5 days ago

Messages

Date: 2025-05-04.12:04:34

Proposed resolution:

This wording is relative to N5008.

  1. Modify [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>;
          […]
      };
    }
    
Date: 2025-05-04.12:31:02

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.

History
Date User Action Args
2025-05-04 12:04:34adminsetmessages: + msg14744
2025-04-29 00:00:00admincreate