https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96868
roland at gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |roland at gnu dot org --- Comment #9 from roland at gnu dot org --- IMHO there's a good case to be made for never warning for designated initializers, even for fields that have uninitialized default-construction. When using a designated initializer, `= {.a=value}` doesn't leave any field `b` uninitialized, it initializes it as `= {}` would, i.e. safely zero for base types, etc. When I write `= {.a=value}` that default-or-zero-initialization of the other fields is exactly what I intended, and I know well that omitted fields in an initializer are different from leaving the fields uninitialized. Clearly opinions on this vary. It seems like it merits having separable option configuration: `-Wmissing-field-initializers`, `-Wmissing-designated-field-initializers`. If that flexibility is available, then it's of less concern what the default state with just `-Wmissing-field-initializers` or `-Wextra` is. The separate question remains whether "missing initializer" vs "missing (explicit) initialization" should also be distinguished differently in the available warning states than what we have today. I don't have much opinion about that one as long as there's a way for me to say that: ``` struct s { int a, b; }; s foo = {.a=1}; ``` is acceptable without warning in C++, even if it requires a different option state than to accept: ``` struct s { int a; int b = 0; }; s foo = {.a=1}; ```