I'm not 100% if this is a bug or if the standard is undefined on this point. But I do believe it is a bug, or atleast unwanted behaviour.
As I don't see where to insert a archive with the files and data I've gathered on bugzilla I'm leaving them on my http viewable from your browser. http://atria.no-ip.org/gcc-bug/ There is some info in the README file (build line etc). And the output of gcc save temps is in : http://atria.no-ip.org/gcc-bug/gcc-save-temps-output The code is extracted and trimmed down from my program to contain only the code neccesary to trigger it. C_CHILD has two constructors one that takes no arguments and one that takes a const char*, C_ROOT has a static member of type C_CHILD, that is constructed with a string constant. cCore has a static member of type C_ROOT that uses the standard ctor. cCore is not instanced anywhere (but it was in my code, apparently not needed to trigger it). Now the problem is. The C_ROOT member of cCore is constructed, The default constructor is ran. Then after the constructor has returned C_ROOT's static member is constructed using the constructor specified in the static declaration. By all means I think and I assumed that all members of a class would be constructed before the constructor of the containing class was run, and not after. I've had a few friends test this too, on MSVC++ it produces the expected results (child constructed first) and on g++ (GCC) 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r1, propolice) it also produces the expected result. -- Summary: Static member object gets constructed after containing objects constructor returns Product: gcc Version: 3.3.4 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: lenkki at atria dot no-ip dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19123