Por que sizeof (std :: variant) tem o mesmo tamanho de uma estrutura com os mesmos membros?

O modelo de classestd::variant representa uma união de tipo seguro. Uma instância destd::variant a qualquer momento, mantém um valor de um de seus tipos alternativos ou não possui valor.

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

Mas se é uma união, por que ocupa tanto espaço?

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

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

A variante tem o mesmo tamanho que a estrutura

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

Eu esperaria o tamanho da união, mais 4 bytes para armazenar, qual tipo está ativo.

questionAnswers(4)

yourAnswerToTheQuestion