I’m not sure you can do it in C++. For the stuff that you need to initialize using designated initializers, you can put those separately in a .c
file compiled as C99, e.g.:
// In common header file
typedef union my_union
{
int i;
float f;
} my_union;
extern const my_union g_var;
// In file compiled as C99
const my_union g_var = { .f = 3.14159f };
// Now any file that #include's the header can access g_var, and it will be
// properly initialized at load time