Ответ 1
Это четко определенный no-op, скажем, я.
Учитывая, что итератор заканчивается, может ли он быть увеличен на ноль без вызова поведения undefined? [..] Меня интересует конкретно оператор
+
.
Для итераторов с произвольным доступом в таблице 115 в разделе [random.access.iterators]
указывается (в разделе "Операционная семантика" и после "расширения" значения этого цикла while
), что (r += 0) ≡ r
, поэтому (.end() += 0) ≡ .end()
.
Определение для r + 0
дается в терминах этого.
Если поведение для
std::advance
илиstd::next
отличается от того, что было бы интересно узнать.
Для всего остального std::next
определяется в терминах std::advance
, который в [iterator.operations]
явно не говорит о том, что это хорошо определено, но это кажется довольно очевидным из формулировки, которая отступает от англо- определение языка для "increment" / "декремент": "Приращение (или уменьшение для отрицательного n
) ссылки итератора i
на n
".
Мы знаем, что англоязычный "приращение" / "декремент" на ноль является практически не применимым.