3277. Pre-increment on prvalues is not a requirement of weakly_incrementable

Section: 24.3.4.13 [iterator.concept.random.access] Status: C++20 Submitter: Eric Niebler Opened: 2019-09-09 Last modified: 2021-02-25

Priority: 0

View all other issues in [iterator.concept.random.access].

View all issues with C++20 status.

Discussion:

See 24.3.4.13 [iterator.concept.random.access]/2.6, which shows ++ being applied to a prvalue iterator.

A similar change has already been made to 25.6.4.2 [range.iota.view]/4.6.

Suggest priority P0 or P1 because it effects the definition of a concept.

[2019-09-24 Issue Prioritization]

Status to Tentatively Ready and priority to 0 after six positive votes on the reflector.

Proposed resolution:

This wording is relative to N4830.

  1. Modify 24.3.4.13 [iterator.concept.random.access] as indicated:

    -2- Let a and b be valid iterators of type I such that b is reachable from a after n applications of ++a, let D be iter_difference_t<I>, and let n denote a value of type D. I models random_access_iterator only if

    1. (2.1) — (a += n) is equal to b.

    2. […]

    3. (2.6) — If (a + D(n - 1)) is valid, then (a + n) is equal to ++[](I c){ return ++c; }(a + D(n - 1)).

    4. […]