My bad. Понял.
В любом случае это UB. Мои пруфы:
[lib.iterator.requirements]/5
Just as a regular pointer to an array guarantees that there is a pointer value pointing past the last element of the array, so for any iterator type there is an iterator value that points past the last element of a corresponding container. These values are called past-the-end values. Values of an iterator i for which the expression *i is defined are called dereferenceable. The library never assumes that past-the-end values are dereferenceable. Iterators can also have singular values that are not associated with any container. [ Example: After the declaration of an uninitialized pointer x (as with int* x;), x must always be assumed to have a singular value of a pointer. — end example ] Results of most expressions are undefined for singular values; the only exceptions are destroying an iterator that holds a singular value and the assignment of a non-singular value to an iterator that holds a singular value. In this case the singular value is overwritten the same way as any other value. Dereferenceable values are always non-singular.
[lib.iterator.requirements]/10
An invalid iterator is an iterator that may be singular.
Сноска к нему же: This definition applies to pointers, since pointers are iterators. The effect of dereferencing an iterator that has been invalidated is undefined.
Отсюда следует, что итератор в положении «past-the-end» и итератор, не связанный с каким-либо контейнером (singular; например, итератор от удалённого контейтера) не обязательно являются dereferenceable, а значит могут быть singular, а значит являются invalud, а значит их разыменование и большая часть операций приводят к UB.
Но, как уже говорил, UB — это не взрывать Пентагон (defns.undefined).