Есть
//file1.cpp
A a;
B b;
//file2.cpp
A a1;
B b1;
Допустим, порядок инициализации был такой : a, b (понятно, что в пределах одной единицы трансляции все не так уж сложно); a1, b1.
b1 разрушится перед a1, b — перед a. Есть ли гарантия, что при описанном порядке вызова конструкторов, деструкторы вызовутся так b1, a1, b, a.