C++ named requirements: LegacyIterator
The LegacyIterator requirements describe types that can be used to identify and traverse the elements of a container.
LegacyIterator is the base set of requirements used by other iterator types: LegacyInputIterator, LegacyOutputIterator, LegacyForwardIterator, LegacyBidirectionalIterator, and LegacyRandomAccessIterator. Iterators can be thought of as an abstraction of pointers.
All the categories of iterators require only those functions that are realizable for a given category in constant time (amortized). Therefore, requirement tables and concept definitions (od C++20) for the iterators do not specify complexity.
Requirements
The type It satisfies LegacyIterator if
- The type It satisfies CopyConstructible, and
- The type It satisfies CopyAssignable, and
- The type It satisfies Destructible, and
- lvalues of type It satisfy Swappable, and
std::iterator_traits<It>
has member typedefs, value_type (do C++20), difference_type, reference, pointer, and iterator_category , and
Given
r
, an lvalue of type It, the following expressions must be valid and have their specified effects:
Expression | Return Type | Precondition |
---|---|---|
*r | unspecified | r is dereferenceable |
++r | It& | r is incrementable (the behavior of the expression ++r is defined) |
Concept (od C++20)
Click to expand
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 3420 | C++20 | the exposition-only concept checks copyable first | copyable is checked only if the requires-expression yields true |