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.

### 3102. Clarify `span iterator` and `const_iterator` behavior

Section: 24.7.3.1 [span.overview] Status: C++20 Submitter: Stephan T. Lavavej Opened: 2018-04-12 Last modified: 2021-02-25

Priority: 0

View other active issues in [span.overview].

View all other issues in [span.overview].

View all issues with C++20 status.

Discussion:

There are multiple issues with how span specifies its iterators:

- `const_iterator` isn't mentioned.

- The relationship between `iterator` and `const_iterator` isn't specified. (`span` isn't a container, so it doesn't receive this automatically.)

- The iterators should be specified to be constexpr.

By imitating 23.3.3.4 [string.view.iterators]/3 "All requirements on container iterators ([container.requirements]) apply to `basic_string_view::const_iterator` as well.", we can specify that `iterator` is convertible to `const_iterator`.

[ 2018-04-23 Moved to Tentatively Ready after 6 positive votes on c++std-lib. ]

[2018-06 Rapperswil: Adopted]

Proposed resolution:

This wording is relative to N4741.

> 1. Edit 24.7.3.1 [span.overview] as indicated:

>    > -4- The iterator types for span is a random access iterator and a contiguous iterator `span::iterator` and `span::const_iterator` are random access iterators (25.3.5.7 [random.access.iterators]), contiguous iterators (25.3.1 [iterator.requirements.general]), and constexpr iterators (25.3.1 [iterator.requirements.general]). All requirements on container iterators (24.2 [container.requirements]) apply to `span::iterator` and `span::const_iterator` as well.