Asignación de un iterador singular
Un "iterador singular" esdefinido como un:
iteradores que no están asociados con ninguna secuencia. Un puntero nulo, así como un puntero construido por defecto (que tiene un valor indeterminado) es singular
Mi pregunta1 sería:¿Un iterador construido por defecto se considera un "iterador singular"?
En segundo lugar, he estadodicho aquí ese:
Los resultados de la mayoría de las expresiones no están definidos para valores singulares; las únicas excepciones son destruir un iterador que tenga un valor singular, la asignación de un valor no singular a un iterador que tenga un valor singular y, para los iteradores que satisfacen los requisitos de DefaultConstructible, usar un iterador inicializado de valor como fuente de una operación de copiar o mover.
Pregunta2 es:¿Trabajar con un resultado que es "indefinido" constituye un comportamiento indefinido? Parece que si eso fuera cierto, este sería un comportamiento indefinido:
void* foo = nullptr;
auto bar = foo;
Perofunciona bien.
Mi motivación más profunda para hacer esta pregunta es en el caso en que tengo una estructura como esta:
struct Foo {
vector<int*>::const_iterator;
};
Quiero saber si es un comportamiento indefinido hacer esto, dóndeassigned
es un valor construidoFoo
objeto:
Foo unasigned;
assigned = unassigned;
Si las respuestas a las preguntas1 y2 son "sí", entonces al invocar el operador de asignación predeterminado, estoy introduciendo un comportamiento indefinido :(