The nested typedef-nameiterator_category of
the specialization of iterator_traits for common_iterator<I, S>
is defined if and only if iter_difference_t<I> is an integral type.
In that case,
iterator_category denotes forward_iterator_tag if
the qualified-iditerator_traits<I>::iterator_category
is valid and denotes a type that
models derived_from<forward_iterator_tag>;
otherwise it denotes input_iterator_tag.