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
tipoX
e 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?