Nomeação de elementos de matriz ou estrutura e matriz em uma união

Considere a seguinte estrutura:

struct Vector4D
{
   union
   {
      double components[4];
      struct { double x, y, z, t; } Endpoint;
   };
};

Parece-me que tenho visto algo semelhante na estrutura do endereço IP do WinApi. A idéia é me dar a possibilidade de usar os componentes da matriz por índice e por nome, por exemplo:

Vector4D v;
v.components[2] = 3.0;
ASSERT(v.Endpoint.z == 3.0) //let's ignore precision issues for now

No padrão C ++, há uma garantia de que não haverá espaço "vazio" no início de uma estrutura POD, ou seja, o elemento x estará situado no início da estrutura do ponto de extremidade. Bom até agora. Mas eu não acho garantias de que não haverá espaço vazio ou preenchimento, se preferir, entrex ey ouy ez, etc. Ainda não verifiquei o padrão C9

O problema é que, se houver um espaço vazio entre os elementos de estrutura do Endpoint, a ideia não funcionar

Questões

Estou certo de que realmente não há garantia de que isso funcione em C ou C +

Isso praticamente funcionará em qualquer implementação conhecida? Em outras palavras, você conhece alguma implementação em que isso não funcione?

Existe alguma maneira padrão (quero dizer, não específica do compilador) de expressar a mesma idéia? Talvez os recursos de alinhamento do C ++ 0x possam ajudar?

By the way, isso não é algo que estou fazendo no código de produção, não se preocupe, apenas curioso. Desde já, obrigado

questionAnswers(4)

yourAnswerToTheQuestion