Разыменование-присваивание дважды увеличенному OutputIterator

На (отличный) вопросТребования к постинкрементному расширению C ++ OutputIteratorмы видим, что для разыменованного и увеличиваемого значенияr изOutputIterator типXи значениеo соответствующего типа, выражение

*r++ = o;

допустимо и имеет эквивалентную семантику

X a(r);
++r;
*a = o;

Тем не менее, это все еще такa присваивается разыменование, еслиr был увеличен более одного раза за прошедший период; то есть этот код действителен?

X a(r);
++r;
++r;
*a = o;

Трудно увидеть, как операции над значением могут влиять на достоверность операций над другим значением, но, например,InputIterator (24.2.3), в соответствии с постусловиями++r:

Any copies of the previous value of r are no longer required either to be dereferenceable or to be in the domain of ==.

Соответствующие разделы:24.2.2 Iterator, 24.2.4 Output iterators, 17.6.3.1 Template argument requirements.

Кроме того, если этоnot должны быть действительными, есть ли ситуации, в которых использование недействительности помогло бы реализовать (с точки зрения эффективности, простоты)OutputIterator типа пока соблюдаете существующие требования?

Ответы на вопрос(1)

Ваш ответ на вопрос