Por que eu tenho "operação pode ser indefinida" em expressão de declaração em C ++?

para descrever o problema simplesmente, por favor, dê uma olhada no código abaixo:

int main()
{
    int a=123;
    ({if (a) a=0;});
    return 0;
}

Eu recebi esse aviso de [-Wsequence-point]

Line 4: warning: operation on 'a' may be undefined

minha versão g ++ é 4.4.5

Eu apreciarei quem quer que explicasse este problema simples.

btw você poderia encontrar o meu programa original e problema original em # 7 emisto Site chinês (não é necessário)

UPD1:

embora para mudar o código em({if(a) a=0; a;}) pode evitar o aviso, mas reconheci que a verdadeira razão do problema pode não serThe last thing in the compound statement should be an expression followed by a semicolon.

porque o documentário também diziaIf you use some other kind of statement last within the braces, the construct has type void, and thus effectively no value.

Um exemplo pode mostrar isso:

int main()
{
    int a=123, b;
    ({;});
    ({if (a) b=0;});
    return 0;
}

e esse código temsem avisos! então eu acho que a verdadeira razão é algo sobre o ponto de seqüência.

por favor ajude!

UPD2:

desculpe a @AndyProwl por ter inaceitado sua resposta que foi aceita antes de UPD1. seguindo seu conselho, posso fazer uma nova pergunta (a UPD1 é uma nova pergunta diferente da original). Eu aceito sua resposta novamente porque certamente evita os avisos de qualquer maneira :)

Se eu decidi fazer uma nova pergunta, atualizarei esta questão para adicionar um link.

questionAnswers(1)

yourAnswerToTheQuestion