C++ named requirements: LegacyForwardIterator
A LegacyForwardIterator is an LegacyIterator that can read data from the pointed-to element.
Unlike LegacyInputIterator and LegacyOutputIterator, it can be used in multipass algorithms.
Requirements
The type It satisfies LegacyForwardIterator if
-  The type 
Itsatisfies LegacyInputIterator -  The type 
Itsatisfies DefaultConstructible -  Objects of the type 
Itprovide multipass guarantee described below -  The type 
std::iterator_traits<It>::referencemust be exactly 
-  
T&ifItsatisfies LegacyOutputIterator (Itis mutable) -  
const T&otherwise (Itis constant), 
-  
 - (where 
Tis the type denoted by std::iterator_traits<It>::value_type) 
- Equality and inequality comparison is defined over all iterators for the same underlying sequence and the value initialized-iterators (since C++14).
 
And, given
-  
i, dereferenceable iterator of typeIt -  
reference,the type denoted bystd::iterator_traits<It>::reference 
The following expressions must be valid and have their specified effects
| Expression | Return type | Equivalent expression | Notes | 
|---|---|---|---|
| i++ | It | It ip=i; ++i; return ip; | |
| *i++ | reference | 
A mutable LegacyForwardIterator is a LegacyForwardIterator that additionally satisfies the LegacyOutputIterator requirements.
Multipass guarantee
Given a and b, dereferenceable iterators of type It
-  If 
aandbcompare equal (a == bis contextually convertible totrue) then either they are both non-dereferenceable or*aand*bare references bound to the same object -  If 
*aand*brefer to the same object, thena==b. -  Assignment through a mutable 
ForwardIteratoriterator cannot invalidate the iterator (implicit due toreferencedefined as a true reference) -  incrementing a copy of 
adoes not change the value read froma(formally, eitherItis a raw pointer type or the expression (void)++It(a), *a is equivalent to the expression *a) -  
a == bimplies++a == ++b 
Singular iteratorsA value-initialized LegacyForwardIterator behaves like the past-the-end iterator of some unspecified empty container: it compares equal to all value-initialized LegacyForwardIterators of the same type. | 
(since C++14) | 
ConceptFor the definition of std::iterator_traits, the following exposition-only concept is defined. 
 where the exposition-only concept   | 
(since C++20) | 
See also
   specifies that an InputIterator is a forward iterator, supporting equality comparison and multi-pass (concept)  |