C++ named requirements: LegacyBidirectionalIterator - cppreference.com
From cppreference.com
A LegacyBidirectionalIterator is a LegacyForwardIterator that can be moved in both directions (i.e. incremented and decremented).
If a LegacyBidirectionalIterator it originates from a Container, then it's value_type is the same as the container's, so dereferencing (*it) obtains the container's value_type.
Requirements
The type It satisfies LegacyBidirectionalIterator if
- The type
Itsatisfies LegacyForwardIterator
And, given
aandb, lvalues of typeItreference, the type denoted bystd::iterator_traits<It>::reference
The following expressions must be valid and have their specified effects:
| Expression | Return | Equivalent expression | Notes |
|---|---|---|---|
--a |
It& |
Preconditions:
Postconditions:
| |
a-- |
convertible to const It& |
It temp = a; --a; return temp; |
|
*a-- |
reference |
A mutable LegacyBidirectionalIterator is a LegacyBidirectionalIterator that additionally satisfies the LegacyOutputIterator requirements.
Notes
The begin iterator is not decrementable and the behavior is undefined if --container.begin() is evaluated.
A bidirectional iterator does not have to be dereferenceable to be decrementable (in particular, the end iterator is not dereferenceable but is decrementable).
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 299 (N3066) |
C++98 | the return type of *a-- wasrequired to be convertible to T
|
changed the return type to reference[1]
|
| LWG 383 | C++98 | b was required to be dereferenceable after --a
|
a is required to be dereferenceable instead
|
| LWG 1212 (N3066) |
C++98 | the return type of *a-- did not match the returntype of *a++ required by LegacyForwardIterator
|
changed the return type to reference
|