¿Cuál es el comportamiento cuando hay tipos no coincidentes entre una declaración externa y la definición?

Supongamos que tengo dos archivos:

== Archivo1 ==

extern char* foo;

== Archivo2 ==

double foo;

Estos dos archivos parecen compilarse y vincularse bien con g ++ y clang ++ a pesar de la falta de coincidencia de tipos. Como entiendo, la práctica recomendada es colocar la declaración externa en un encabezado que incluya ambos archivos para que File2 arroje un error de redefinición.

Mis preguntas son:

¿Esto resulta en un comportamiento indefinido de acuerdo con el estándar de c ++? Si no lo que entrafoo en File1?¿Podrían los enlazadores atrapar este tipo de desajuste de tipo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta