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:
X
satisfies LegacyIterator.X
satisfies 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 |