(1) the order of initialization of globals is not defined
Global variables in a single translation unit (source file) are initialized in the order in which they are defined.
The order of initialization of global variables in different translation units is unspecified.
(2) the order of initialization of globals ignores all dependencies
Right.
Is it possible to make sure the constructor of Foo is called before initializing dummy?
Yes, if globalFoo
is defined before dummy
and they are in the same translation unit.
One option would be to have a static pointer to the global instance; such a pointer will be initialized to null before any dynamic initialization takes place; addToGlobal
can then test whether the pointer is null; if it is, then it is the first time the global is being used and addToGlobal
can create the global Foo
.