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.

### 3236. Random access iterator requirements lack limiting relational operators domain to comparing those from the same range

Section: 23.3.5.7 [random.access.iterators] Status: WP Submitter: Peter Sommerlad Opened: 2019-07-15 Last modified: 2020-11-09

Priority: 3

View all other issues in [random.access.iterators].

View all issues with WP status.

Discussion:

For forward iterators we have very clear wording regarding the restricted domain of `operator==` in 23.3.5.5 [forward.iterators] p2:

> The domain of `==` for forward iterators is that of iterators over the same underlying sequence. However, value-initialized iterators may be compared and shall compare equal to other value-initialized iterators of the same type. [Note: Value-initialized iterators behave as if they refer past the end of the same empty sequence. — end note]

But for the relational operators of random access iterators specified in 23.3.5.7 [random.access.iterators], Table [tab:randomaccessiterator], no such domain constraints are clearly defined, except that we can infer that they are similarly constrained as the difference of the compared iterators by means of the operational semantics of `operator<`.

[2019-07-29; Casey comments and provides wording]

Change the "Operational Semantics" column of the "`a < b`" row of [tab:randomaccessiterator] to "Effects: Equivalent to: `return` `b - a > 0`;

It then follows that `a < b` is required to be well-defined over the domain for which `b - a` is required to be well-defined, which is the set of pairs `(x, y)` such that there exists a value `n` of type difference_type such that `x + n == b`.

[2020-02-13, Prague]

P3, but some hesitation to make it Immediate, therefore moving to Ready.

[2020-11-09 Approved In November virtual meeting. Status changed: Ready → WP.]

Proposed resolution:

This wording is relative to N4849.

1. Modify 23.3.5.7 [random.access.iterators] as indicated:

   > Table 87: Cpp17RandomAccessIterator requirements (in addition to Cpp17BidirectionalIterator) [tab:randomaccessiterator]
   > Expression | Return type | Operational semantics | Assertion/note pre-/post-condition
   > --- | --- | --- | ---
   > `[…]`
   > `a < b` | contextually convertible to `bool` | Effects: Equivalent to: `return` `b - a > 0;` | `<` is a total ordering relation