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

### 3389. A move-only iterator still does not have a `counted_iterator`

Section: 23.5.6.2 [counted.iter.const] Status: C++20 Submitter: Patrick Palka Opened: 2020-02-07 Last modified: 2021-02-25

Priority: 0

View all issues with C++20 status.

Discussion:

P1207R4 ("Movability of single-pass iterators") introduces the notion of a move-only non-forward iterator and makes some changes to the iterator adaptor `counted_iterator` in order to support move-only iterators.

The problem is that the constructor of `counted_iterator` (23.5.6.2 [counted.iter.const] p2) accepting such an iterator is specified as "Initializes `current` with `i`" which would attempt copy-constructing `current` from `i` instead of move-constructing it.

[2020-02 Prioritized as IMMEDIATE Monday morning in Prague]

Proposed resolution:

This wording is relative to N4849.

1. Modify 23.5.6.2 [counted.iter.const] as indicated:

   >     constexpr counted_iterator(I i, iter_difference_t<I> n);

   > > -1- Preconditions: `n >= 0`.

   > > -2- Effects: Initializes `current` with `std::move(i)` and `length` with `n`.