Atribuição de desreferenciamento a um OutputIterator duplamente incrementado

Pela (excelente) perguntaRequisitos de pós-incremento do C ++ OutputIterator, observamos que para um valor desreferenciavel e incrementávelr doOutputIterator tipoXe valoro de tipo apropriado, a expressão

*r++ = o;

é válido e tem semântica equivalente a

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

No entanto, ainda é o casoa é desreferencial atribuível ser foi incrementado mais de uma vez no período de intervenção; isto é, este código é válido?

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

É difícil ver como as operações em um valor podem ter um efeito sobre a validade das operações em outro valor, mas, por exemplo,InputIterator (24.2.3) tem, sob as pós-condições de++r:

Qualquer cópia do valor anterior der deixam de ser obrigados a ser desreferenciados ou a estar no domínio de==.

Seções relevantes:24.2.2 Iterador, 24.2.4 Iteradores de saída, 17.6.3.1 Requisitos do argumento de modelo.

Além disso, se isso énão exigida para ser válida, existem situações em que a exploração da sua não validade ajudaria na implementação (eficiência, simplicidade) de umaOutputIterator tipo enquanto ainda observa os requisitos existentes?

questionAnswers(1)

yourAnswerToTheQuestion