| | |
template<class I>
concept input_or_output_iterator= requires(I i){ {*i}->/*can-reference*/; }&&
std::weakly_incrementable<I>; | | (since C++20) |
| | |
Theinput_or_output_iterator
concept forms the basis of the iterator concept taxonomy; every iterator type satisfies theinput_or_output_iterator
requirements.
The exposition-only concept/*can-reference*/ is satisfied if and only if the type isreferenceable.
input_or_output_iterator
itself only specifies operations for dereferencing and incrementing an iterator. Most algorithms will require additional operations, for example:
Unlike theLegacyIterator requirements, theinput_or_output_iterator
concept does not require copyability.
*i is required to be equality-preserving, although the increment operations required byweakly_incrementable
are not.
[edit]Example
A minimum iterator.
#include <cstddef>#include <iterator> struct SimpleIterator{using difference_type=std::ptrdiff_t; int operator*(); SimpleIterator& operator++();void operator++(int){++*this;}}; static_assert(std::input_or_output_iterator<SimpleIterator>);