According to the C++0x status page (http://gcc.gnu.org/gcc-4.5/cxx0x_status.html), "Standard Layout Types" (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm) have been implemented in gcc-4.5. A quick test shows that trivial types are not being statically initialized, as the paper requires. The following struct S is trivial and the non-local constant s should be statically initialized, IIUC:
struct S { S() {} }; S const s{}; However, when compiled with -O2 -std=c++0x -S using the latest 4.5 snapshot, I see the following assembly: .file "main.cpp" .text .p2align 4,,15 .def __GLOBAL__I_main.cpp; .scl 3; .type 32; .endef __GLOBAL__I_main.cpp: pushl %ebp movl %esp, %ebp popl %ebp ret .section .ctors,"w" .align 4 .long __GLOBAL__I_main.cpp Unless I'm mistaken, the global s is still being dynamically initialized. Apologies in advance if I'm reading this wrong. -- Summary: trivial types are not being statically initialized Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: eric dot niebler at gmail dot com GCC build triplet: gcc-4.5-20100304 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43330