Wie verhält es sich, wenn zwischen einer externen Deklaration und der Definition nicht übereinstimmende Typen vorliegen?

Angenommen, ich habe zwei Dateien:

== Datei1 ==

extern char* foo;

== File2 ==

double foo;

Diese beiden Dateien scheinen trotz der Typinkongruenz gut mit g ++ und clang ++ zu kompilieren und zu verknüpfen. Soweit ich weiß, wird empfohlen, die externe Deklaration in einen Header zu schreiben, der beide Dateien enthält, damit File2 einen Redefinitionsfehler ausgibt.

Meine Fragen sind:

Führt dies zu undefiniertem Verhalten gemäß dem c ++ - Standard? Wenn nicht was reinkommtfoo in Datei1?Können Linker diese Art von Typinkongruenz feststellen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage