std::input_iterator
Min standard notice:
Header: <iterator>
The input_iterator concept is a refinement of input_or_output_iterator, adding the requirement that the referenced values can be read (via indirectly_readable) and the requirement that the iterator concept tag be present.
# Declarations
template< class I >
concept input_iterator =
std::input_or_output_iterator<I> &&
std::indirectly_readable<I> &&
requires { typename /*ITER_CONCEPT*/<I>; } &&
std::derived_from</*ITER_CONCEPT*/<I>, std::input_iterator_tag>;
(since C++20)
# Notes
Unlike the LegacyInputIterator requirements, the input_iterator concept does not require equality_comparable, since input iterators are typically compared with sentinels.
# Example
#include <cstddef>
#include <iterator>
struct SimpleInputIterator
{
using difference_type = std::ptrdiff_t;
using value_type = int;
int operator*() const;
SimpleInputIterator& operator++();
void operator++(int) { ++*this; }
};
static_assert(std::input_iterator<SimpleInputIterator>);