Сравнение i1
и i2
не запрещено .std::vector::iterator
- это OutputIterator
, и вы можете сравнить их.Что вы не можете сделать, так это предположить, что все OutputIterator
s можно сравнить.
Все, что говорится в концепции, это то, что не требуется , чтобы тип, поддерживающий сравнение, был OutputIterator
, потому что требование этого означало бы некоторые вещи, которые действительно заслуживаютбыть OutputIterator
s не.Примером может служить @ итератор ленты NathanOliver .Другой пример: std::ostream_iterator
У нас уже есть ситуация, когда к одной из категорий итераторов предъявляются слишком обременительные требования: ForwardIterator
требует, чтобы разыменование возвращало ссылочный тип.Это означает, что любой прокси-итератор ограничен InputIterator
, даже если он поддерживает --
, +=
, -=
и т. Д.
Если вы пишете несколько функций, которые хотите писать, пока они не получат«заполнив» вывод, вы можете подумать об определении категории ComparableOutputIterator
(или о таком имени) и потребовать ==
, а также OutputIterator
для членства в этой категории.