Search code examples
c++clinuxgccdesignated-initializer

Why are designated initializers not implemented in g++


Is there any specific reason why has support for designated initializers not been added to g++? Is the reason that C99 standards came late and g++ was developed earlier and later people didn't care about this issue, or there is some inherent difficulty in implementing designated initializers in the grammar of C++?


Solution

  • As I noted in a comment, G++ doesn't support C99 standard designated initialisers, but it does support the GNU extension to C90 which allows designated initialisers. So this doesn't work:

    union value_t {
        char * v_cp;
        float v_f;
    };
    union value_t my_val = { .v_f = 3.5f };
    

    But this does:

    union value_t my_val = { v_f: 3.5f };
    

    This seems to be a bad interaction of co-ordination between the C and C++ standards committees (there is no particularly good reason why C++ doesn't support the C99 syntax, they just haven't considered it) and GCC politics (C++ shouldn't support C99 syntax just because it's in C99, but it should support GNU extension syntax that achieves exactly the same thing because that's a GNU extension that can be applied to either language).