'C99 designator member outside of aggregate initializer

struct Foo {
    char a[10];
    int b;
};

static Foo foo = {.a="bla"};

Compiling the above code gives the following gcc error:

$ gcc -std=gnu++2a test.cpp 

C99 designator ‘a’ outside aggregate initializer

I thought that c-string designators in initializer list like these are ok in C++20? What am I missing? I am using gcc version 10.



Solution 1:[1]

This is a known bug with GCC: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55227

Unfortunately, you will have to either not use designated initializers or use a different initializer for the array:

static Foo foo = {"bla"};
static Foo foo = {.a={'b', 'l', 'a', 0}};

Solution 2:[2]

I got the same error and I dealt with mv my.cpp my.c

You also can find answer in this link: https://pcbartists.com/firmware/esp32-firmware/designator-outside-aggregate-initializer-solved/

#ifdef __cplusplus
extern "C"
{
#endif

    // C code goes here
    
#ifdef __cplusplus
}
#endif

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Artyer
Solution 2 Jean-François Fabre