ordem de inicialização estática fiasco

Eu estava lendo sobre SIOF de um livro e deu um exemplo:

//file1.cpp
extern int y;
int x=y+1;

//file2.cpp
extern int x;
int y=x+1;  

Agora minha pergunta é:
No código acima, as seguintes coisas acontecerão?

ao compilar file1.cpp, o compilador deixa y como está, ou seja, não aloca armazenamento para ele.O compilador aloca armazenamento para x, mas não o inicializa.Ao compilar file2.cpp, o compilador deixa x como está, ou seja, não aloca armazenamento para ele.O compilador aloca armazenamento para y, mas não o inicializa.Ao vincular file1.o e file2.o, agora permita que file2.o seja inicializado primeiro, agora:
X obtém o valor inicial de 0? ou não é inicializado?

questionAnswers(4)

yourAnswerToTheQuestion