¿Por qué sizeof (std :: variant) tiene el mismo tamaño que una estructura con los mismos miembros?

La plantilla de clasestd::variant representa una unión de tipo seguro. Una instancia destd::variant en cualquier momento tiene un valor de uno de sus tipos alternativos o no tiene ningún valor.

sizeof(std::variant<float, int32_t, double>) == 16

Pero si es una unión, ¿por qué ocupa tanto espacio?

struct T1 {
    float a;
    int32_t b;
    double c;
};

struct T2 {
    union {
        float a;
        int32_t b;
        double c;
    };
};

La variante tiene el mismo tamaño que la estructura.

sizeof(T1) == 16
sizeof(T2) == 8

Esperaría el tamaño de la unión, más 4 bytes para almacenar, qué tipo está activo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta