Разыменование итератора за пределами конца контейнера, из которого он был получен, является неопределенным поведением, и бездействие - просто возможность.
Обратите внимание, что это вопрос компромисса, хорошо, когда итераторы проверяют правильность разработки, но это добавляет дополнительные операции к коду. В MSVS по умолчанию проверяются итераторы (они проверят, что они действительны и работают с ошибками при неправильном использовании =. Но это также влияет на производительность во время выполнения.
Решение, которое предоставляет Dinkumware (STL внутри VS) (проверено по умолчанию, может быть отключено с помощью параметров компилятора), на самом деле является хорошим выбором, пользователь выбирает, хочет ли он медленных безопасных итераторов или быстрых небезопасных версий. Но с точки зрения языка оба действительны.