С++ гарантирует, что переменные в компиляторе (файл .cpp) инициализируются в порядке объявления. Для количества единиц компиляции это правило работает для каждого отдельно (я имею в виду статические переменные вне классов).
Но порядок инициализации переменных равен undefined для разных единиц компиляции.
Где я могу увидеть некоторые объяснения этого порядка для gcc и MSVC (я знаю, что полагаться на это очень плохая идея - это просто понять проблемы, которые у нас могут быть с устаревшим кодом при переходе на новый GCC major и разные ОС)?