Всегда ли порядок статических переменных уровня файла одинаков в данной единице перевода?

У меня есть программа, разделенная на два исходных файла:

example.cpp

#include <iostream>

class A {
 public:
   A(int x) {
      ::std::cout << "In A(" << x << ")\n";
   }
};

static A first(1);
static A second(2);

example __ main.cpp

int main(int argc, const char *argv[])
{
   return 0;
}

Гарантированно ли вывод этой программы :

In A(1)
In A(2)

на всех платформах и компиляторах? Если да, то где в стандарте это сказано? Имеет ли значение, если я использую пространства имен, а первый и второй появляются в разных пространствах имен? Как насчет того, чтобы они не были статичными и я использую анонимное пространство имен?

5
задан Omnifarious 10 November 2011 в 23:31
поделиться