¿Incrementar un iterador de entrada mutable invalida los valores del iterador anterior?

Los iteradores que satisfacen aún más los requisitos de los iteradores de salida se denominaniteradores mutables. Los iteradores no mutables se conocen comoiteradores constantes. [24.2.1: 4]

Esto sugiere que podría tener un iterador de entrada mutable, que cumpla con los requisitos de los iteradores de entrada y salida.

Después de incrementar un iterador de entrada, las copias de su valor anterior no tienen que ser anulables [24.2.3]. Sin embargo, el estándar no dice lo mismo para los iteradores de salida; de hecho, la semántica operacional para el incremento postfix se da como{ X tmp = r; ++r; return tmp; }, lo que sugiere que los iteradores de salida no pueden invalidar (copias de) los valores de iteradores antiguos.

Entonces, ¿el incremento de un iterador de entrada mutable puede invalidar las copias del iterador anterior?

Si es así, ¿cómo apoyaría código comoX a(r++); *a = t oX::reference p(*r++); p = t con (por ejemplo) un objeto proxy?

Si no, entonces porqueboost::iterator ¿Afirma que necesita un objeto proxy? (El enlace es código; desplácese hacia abajo para leer los comentarios enstructs writable_postfix_increment_proxy ypostfix_increment_result). Es decir, si puede devolver una copia (anulable) del antiguo valor del iterador, ¿por qué tendría que envolver esta copia en un proxy?

Respuestas a la pregunta(2)

Su respuesta a la pregunta