Podemos acessar o membro de um objeto de tipo de classe inexistent

No padrão c ++, em [basic.lval] /11. diz:

Se um programa tentar acessar o valor armazenado de um objeto por meio de um valor gl de outro que não seja um dos seguintes tipos, o comportamento será indefinido: [...]

um tipo de agregação ou união que inclui um dos tipos mencionados acima entre seus elementos ou membros de dados não estáticos (incluindo, recursivamente, um elemento ou membro de dados não estático de uma união subagregada ou contida), [..

Esta frase faz parte do alias estrito regra.

Permite-nos criar um alias através do acesso de membro da classe?

class A{ //"casted to" aggregate
  int i;
  float g;
  };

int j=10;
int l = reinterpret_cast<A*>(&j)->i;

De acordo com o padrão, um valor de objeto só é acessado se o objeto estiver sujeito a lvalue-para-rvalue-conversão [conv.lval] / 2.

[expr.ref] não estipula que o expressão do objeto deve se referir a um objeto desse tipo, apenas que o glvalue deve ter um tipo de classe (o expressão do objeto é a expressão à esquerda do ponto "."). No entanto, há uma palavra que aparece recorrente na sentença relacionada ao acesso de membros, o que pode implicar em restrições ao programa que eu ignorei. Por exemplo [expr.ref] / 4.1:

Se E2 for um membro de dados estáticos e o tipo de E2 for T, então E1.E2 será um valor l; a expressão designa o membro nomeado da classe.

Pode "designar" significa que esse membro está dentro de sua vida útil e que eu não posso usar o acesso de membro da classe ao aliasing perfeito. Ou é permitido por [basic.lval] /11.6

questionAnswers(2)

yourAnswerToTheQuestion