Desreferencia-asignación a un OutputIterator incrementado doblemente

Por la (excelente) preguntaC ++ OutputIterator requisitos post-incremento, observamos que para un valor desacelerable e incrementable.r deOutputIterator tipoXy valoro de tipo apropiado, la expresión

*r++ = o;

es válido y tiene semántica equivalente a

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

Sin embargo, ¿sigue siendo el caso ela es desreferenciable asignable sir se ha incrementado más de una vez en el período intermedio; Es decir, ¿es válido este código?

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

Es difícil ver cómo las operaciones en un valor pueden tener un efecto en la validez de las operaciones en otro valor, pero por ejemplo.InputIterator (24.2.3) tiene, bajo las postcondiciones de++r:

Cualquier copia del valor anterior der Ya no se requiere que se pueda descifrar ni estar en el dominio de==.

Secciones relevantes:24.2.2 Iterador, 24.2.4 iteradores de salida, 17.6.3.1 Requisitos de argumento de plantilla.

Además, si esto esno se requiere que sea válido, ¿existen situaciones en las que explotar su no validez ayudaría en la implementación (w.r.t. eficiencia, simplicidad) de unOutputIterator Escriba mientras observa los requisitos existentes?

Respuestas a la pregunta(1)

Su respuesta a la pregunta