Qual é o comportamento quando há tipos incompatíveis entre uma declaração externa e a definição?

Suponha que eu tenha dois arquivos:

== Arquivo1 ==

extern char* foo;

== Arquivo2 ==

double foo;

Esses dois arquivos parecem compilar e linkar bem com o g ++ e o clang ++, apesar da incompatibilidade de tipos. Pelo que entendi, a prática recomendada é colocar a declaração externa em um cabeçalho que ambos os arquivos incluem, então o File2 lançará um erro de redefinição.

Minhas perguntas são:

Isso resulta em comportamento indefinido de acordo com o padrão c ++? Se não é o que entrafoo no arquivo1?Os criadores de link podem pegar esse tipo de incompatibilidade de tipos?

questionAnswers(2)

yourAnswerToTheQuestion