inicialização de estruturas ou uniões anônimas no C1X

Eu tenho a seguinte pergunta: Como as estruturas (ou uniões) anônimas são inicializadas corretamente de acordo com a atualRascunho C1X? Isso é legal:

struct foo {
    int a;
    struct {
        int i;
        int j;
    };
    int b;
};

struct foo f = { 1, 2, 3, 4 };
struct foo g = { 1, { 2 }, 3 };

No GCC,g.j == 0 eg.b == 3, enquanto em tccg.j == 3 eg.b == 0. O rascunho atual diz:

"[...] membros não nomeados de objetos de estrutura e tipo de união não participam da inicialização. Membros sem nome de objetos de estrutura têm valor indeterminado, mesmo após a inicialização.".

Isso pode ser verdade? Não é

struct foo h = { 0 };

deveria definirtudo membros para 0?

Muito obrigado!

ATUALIZAR:

Como membros anônimos parecem ser úteis apenas ao misturar estruturas / uniões, como inicializar isso corretamente:

struct bar {
    int tag;
    union {
        double d;
        int i;
    };
};

? Isso fornece erros no gcc <4.6 e no icc 11, mas funciona no gcc 4.6, icc 12, clang e tcc:

struct bar a = { .tag = 1, .i = 42 };

Isso gera erros no clang e no tcc, mas funciona no gcc e no icc:

struct bar b = { .tag = 1, { .i = 42 } };

O segundo é uma violação do padrão?

questionAnswers(3)

yourAnswerToTheQuestion