inicialización sindical

Estoy intentando inicializar globalmente una unión como en el siguiente ejemplo:

#include <cstdio>

typedef union {
    char t[4];
    int i;
} a;

enum {
    w = 5000,
    x,
    y,
    z
};

a temp = {w};
int main() {
    printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
    return 0;
}

Sin embargo, si ejecuta el código, notará que ni temp.i ni temp.t [...] realmente dan el elemento correcto con el que inicialicé la unión. Me imagino que esto se evitaría si pudiera inicializar manualmente el miembro entero, pero desafortunadamente no puedo. Tampoco puedo cambiar el orden de los elementos dentro de la estructura (intercambiando el orden int y char inicializa todo correctamente), en realidad son proporcionados por una biblioteca externa. Mi pregunta es esta: ¿cómo puedo configurar el miembro entero de la estructura globalmente, en lugar del miembro char [4] (o, en este caso, solo el primer elemento del char [])?

EDIT: Además, ¿existe una solución estrictamente c ++ para este problema? es decir, uno donde la inicialización de la estructura con nombre no funciona (porque no existe en el idioma)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta