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