Dynamic Initialization

c++

Solution

The definitive answer is that all compilers do static initialization before `main`, unless the objects are in a DLL which is loaded later. In practice, it's (almost) impossible to meet the requirements in the text you cite otherwise. (Think of what happens if there is a cycle.)

Problem

C++03 Standard [basic.start.init] point 3 states: It is implementation-defined whether or not the dynamic initialization (8.5, 9.4, 12.1, 12.6.1) of an object of namespace scope is done before the first statement of main. If the initialization is deferred to some point in time after the first statement of main, it shall occur before the first use of any function or object defined in the same translation unit as the object to be initialized. Microsoft Compilers, according to Additional Startup Considerations, perform the initialization prior to `main()`. I have been unable to obtain documentation stating the behaviour for GNU and Sun Forte compilers. Can anyone: - Point me in the direction of documentation that describes the behaviour of the GNU and Forte compilers with respect to dynamic initialization (I have checked the GCC manual and found nothing relating to dynamic initialization). - Comment on the thread-safety of deferred dynamic initialization (if two threads attempt to invoke a function from the same translation unit that contains a non-local object). FWIW, I observed the behaviour of GNU's g++ and SUN's CC and both performed the initalization prior to main though I don't accept this as a definitive answer. (I can post the very simple code I used to observe if anyone is interested but I felt the question is long enough)

Original source