As instruções compostas (blocos) são rodeadas pelas expressões parens em ANSI C?

Navegando pelas fontes do kernel do Linux que encontreialgum pedaço de código onde um bloco de instruções cercado por parênteses é tratado como uma expressãoa la lisp (ou ML), isto é, uma expressão cujo valor é o valor da última declaração.

Por exemplo:

int a = ({
    int i;
    int t = 1;
    for (i = 2; i<5; i++) {
        t*=i;
    }
    t;
});

Eu estive olhando para oGramática ANSI C tentando descobrir como essa parte do código caberia na árvore de análise, mas não obtive sucesso.

Então, alguém sabe se esse comportamento é exigido pelo padrão ou é apenas uma peculiaridade do GCC?

Atualizar: Eu tentei com a bandeira -pedantic e o compilador agora me dá um aviso:

warning: ISO C forbids braced-groups within expressions

questionAnswers(2)

yourAnswerToTheQuestion