Рассмотрим ситуацию, подобную приведенной ниже.
// Foo.h
#include <vector>
class Foo
{
public:
Foo()
{
foos.emplace_back(this);
}
private:
static std::vector<Foo*> foos;
};
// Foo.cpp
std::vector<Foo*> Foo::foos;
// Bar.h
class Bar
{
private:
static Foo foo;
};
// Bar.cpp
Foo Bar::foo;
Зная о статическом порядке инициализации Fiasco, могу ли я предположить, что Foo::foos
всегда будет инициализироваться до вызова конструктора Bar::foo
или порядок еще не определен?
Из того, что я собрал , мне кажется, что это зависит от используемых типов, но в моем случае такое предположение недопустимо, поскольку std::vector
не имеет конструктора constexpr
, поэтому его инициализация выполняется во время шага динамической инициализации инициализации нелокальной переменной, и то же самое относится к Foo
. Это правда?