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 :(

Respuestas a la pregunta(2)

Su respuesta a la pregunta