https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107500
--- Comment #4 from R. Diez <rdiezmail-gcc at yahoo dot de> --- The 'constant_init' wrapper with the 'union' inside is a contrived hack, isn't it? We may as well use a different hack then. How about a combination of '__attribute__ constructor' and 'placement new' like this? uint8_t some_buffer[ sizeof( __cxa_eh_globals ) ]; // All objects with an init_priority attribute are constructed before any // object with no init_priority attribute. #define SOME_INIT_PRIORITY 200 // Priority range [101, 65535]. static __attribute__ ((constructor (SOME_INIT_PRIORITY))) void MyHackForInitWithoutAtExitDestructor ( void ) throw() { // Placement new. new ( some_buffer ) __cxa_eh_globals(); } You would then need a 'get_eh_globals()' wrapper to return a pointer or a reference to a '__cxa_eh_globals' object from 'some_buffer', by doing a type cast. Everybody should then use the wrapper to access that singleton object.