The InputIterator concept is a refinement of Iterator ([iterators.iterator]). It defines requirements for a type whose referenced values can be read (from the requirement for Readable ([iterators.readable])) and which can be both pre- and post-incremented. [ Note: Unlike in ISO/IEC 14882, input iterators are not required to satisfy EqualityComparable ([concepts.lib.compare.equalitycomparable]). — end note ]
template <class I>
concept bool InputIterator =
Iterator<I> &&
Readable<I> &&
requires { typename iterator_category_t<I>; } &&
DerivedFrom<iterator_category_t<I>, input_iterator_tag>;