On Fri, 28 Nov 2014, Mason wrote: > On 24/11/2014 17:53, Mason wrote: > > > Consider the following code: [big snip] > > (Perhaps my previous message was too verbose.) > > Why does gcc reject the following code: > > union foob { int val; struct { int X; } bits; }; > static const int u = ((union foob) {.bits = { .X=42 }}).val; > > $ gcc -std=gnu89 test.c > test.c:2:30: error: initializer element is not constant > static const int u = ((union foob) {.bits = { .X=42 }}).val; For the reason stated in the error message: that initializer is not a constant expression (it involves access to an anonymous object). There is a limited allowance in GNU C for when the initializer is a compound literal of the right type (so that you can define a macro of a structure or union type that expands to something usable in both assignments and initializers), but not for any more complicated operations involving them. -- Joseph S. Myers joseph@xxxxxxxxxxxxxxxx