C++ named requirements: LegacyInputIterator
A LegacyInputIterator is a LegacyIterator that can read from the pointed-to element. LegacyInputIterators only guarantee validity for single pass algorithms: once a LegacyInputIterator i
Requirements
| Type | Definition |
X
|
An input iterator type |
T
|
The value type of X (i.e.
std::iterator_traits
<X>
::
value_type
|
R
|
std::iterator_traits <X> :: reference |
| Value | Definition |
| i, j | Values of type X or const X
|
| r | A value of type X&
|
| Other | Definition |
m
|
An identifier which possibly denotes a data member or member function |
X satisfies LegacyInputIterator if all following conditions are satisfied:
Xsatisfies LegacyIterator.Xsatisfies EqualityComparable.- The following expressions are well-formed and have the specified semantics:
| Expression | Type | Semantics | |||||
|---|---|---|---|---|---|---|---|
| i != j |
|
Precondition | i and j are in the domain of == | ||||
| Effect | Equivalent to !(i == j). | ||||||
| *i | R, convertible to T
|
Precondition | i is dereferenceable. | ||||
| Effect |
|
||||||
| i->m | Precondition | i is dereferenceable. | |||||
| Effect | Equivalent to (*i).m. | ||||||
| ++r | X&
|
Precondition | r is dereferenceable. | ||||
| Postcondition |
|
||||||
| (void)r++ | Effect | Equivalent to (void)++r. | |||||
| *r++ | convertible to T
|
Effect | Equivalent to T x = *r; ++r; return x; | ||||
Equality domain
The term the domain of == is used in the ordinary mathematical sense to denote the set of values which can be compared using ==
Each algorithm places additional requirements on the equality domain for the iterator values it uses. These requirements can be inferred from the uses that algorithm makes of == and !=
Notes
For an input iterator X that is not a LegacyForwardIterator,
std::iterator_traits
<X>
::
reference
does not have to be a reference type: dereferencing an input iterator may return a proxy object or
std::iterator_traits
<X>
::
value_type
itself by value (as in the case of std::istreambuf_iterator
ConceptFor the definition of std::iterator_traits, the following exposition-only concept is defined.
where the exposition-only concept |
(since C++20) |
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 98 | C++98 | the return type of *i++ was required to be T
|
it can be any type convertible to T
|
| LWG 2114 (P2167R3) |
C++98 | convertibility to bool was too weak to reflect the expectation of implementations |
requirements strengthened |
See also
|
(C++20)
|
specifies that a type is an input iterator, that is, its referenced values can be read and it can be both pre- and post-incremented (concept) |
| Iterator library | provides definitions for iterators, iterator traits, adaptors, and utility functions |