std::input_iterator

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>);

# See also