A herança via desenrolamento viola a regra estrita de aliasing?

Eu tenho um struct X que herda de struct Base. No entanto, na minha configuração atual, devido ao alinhamento, o tamanho de X é 24B:

typedef struct {
    double_t a;
    int8_t b;
} Base;

typedef struct {
    Base base;
    int8_t c;
} X;

Para economizar memória, gostaria de descontrair a estrutura Base, então criei a estrutura Y que contém os campos da Base (na mesma ordem, sempre no início da estrutura), para que o tamanho da estrutura seja 16B :

typedef struct {
    double_t base_a;
    int8_t base_b;
    int8_t c;
} Y;

Então, eu vou usar a instância da estrutura Y em um método que espera um ponteiro para a estrutura Base:

void print_base(Base* b)
{
  printf("%f %d\n", b->a, b->b);
}
// ...
Y data;
print_base((Base*)&data);

O código acima viola a regra estrita de alias e causa comportamento indefinido?

questionAnswers(1)

yourAnswerToTheQuestion