Инициализация структуры тройным оператором

Почему тернарный оператор не может использоваться для инициализации типа структуры, в то время как его можно использовать для инициализации базового типа типа int ?

Пример кода:

#include  #define ODD 1 int main(int argc, const char *argv[]) { static struct pair_str { int first; int second; } pair = ( ODD ) ? {1,3} : {2,4}; // ERROR printf("pair %d %d\n", pair.first, pair.second); int number = (ODD) ? 1 :2; // FINE return 0; 

}

Ошибки компилятора:

 /home/giuseppe/struct.c: In function 'main': /home/giuseppe/struct.c:12:23: error: expected expression before '{' token /home/giuseppe/struct.c:12:29: error: expected expression before ':' token 

    Конечно, используйте C99 сложные литералы:

     pair = odd ? (struct pair_str){ 1, 3 } : (struct pair_str){ 2, 4 };