Extraña inicialización en C

Tengo este código y no sé cómo funciona.

#include  int main(void) { int numero = ({const int i = 10; i+10;}); printf("%d\n", numero); // Prints 20 return 0; } 

¿Por qué si elimino la segunda parte (i + 10;), el comstackdor recibe un error? ¿Por qué son necesarios los soportes?

Gracias ^^!

Es una expresión de statement GCC . Ejecuta las declaraciones en él y devuelve el valor evaluado en la última statement. Así se inicializa numero a 20 . Si elimina la segunda parte, no hay una expresión como la última instrucción, por lo que no puede obtener un valor de la expresión de la statement.

Las llaves son necesarias para desambiguarlo de las expresiones ordinarias entre paréntesis.