Incrementar um iterador de entrada mutável invalida valores antigos do iterador?

Iteradores que satisfazem ainda mais os requisitos dos iteradores de saída são chamadositeradores mutáveis. Ieradores não imutáveis ​​são referidos comoiteradores constantes. [24.2.1: 4]

Isso sugere que você pode ter um iterador de entrada mutável, que atenda aos requisitos dos iteradores de entrada e saída.

Depois de incrementar um iterador de entrada, as cópias de seu valor antigo não precisam ser desreferenciadas [24.2.3]. No entanto, o padrão não diz o mesmo para os iteradores de saída; na verdade, a semântica operacional para incrementos de postfix é dada como{ X tmp = r; ++r; return tmp; }, sugerindo que os iteradores de saída não podem invalidar (cópias de) valores antigos do iterador.

Então, incrementar um iterador de entrada mutável invalida cópias antigas do iterador?

Se sim, como você suportaria código comoX a(r++); *a = t ouX::reference p(*r++); p = t com (por exemplo) um objeto proxy?

Se não, então por queboost::iterator afirma que precisa de um objeto proxy? (Link é código; desloque-se para ler os comentários sobrestructs writable_postfix_increment_proxy epostfix_increment_result). Ou seja, se você puder retornar uma cópia (dereferenciável) do antigo valor do iterador, por que você precisaria quebrar essa cópia em um proxy?

questionAnswers(2)

yourAnswerToTheQuestion