После обновы до 11.2 столкнулся с тем, что следующий код перестал компилироваться:
#include <iostream>
using namespace std;
#pragma pack(1)
struct RGBA {
union {
uint32_t word;
struct {
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} rgba;
};
};
#pragma pack()
const RGBA RGBA_WHITE = { .rgba = { 0xff, 0xff, 0xff, 0xff } };
const RGBA RGBA_RED = { .rgba = { 0xff, 0x00, 0x00, 0xff } };
const RGBA RGBA_GREEN = { .rgba = { 0x00, 0xff, 0x00, 0xff } };
const RGBA RGBA_BLUE = { .rgba = { 0x00, 0x00, 0xff, 0xff } };
const RGBA RGBA_BLACK = { .rgba = { 0x00, 0x00, 0x00, 0xff } };
const RGBA RGBA_GREY = { .rgba = { 0x80, 0x80, 0x80, 0xff } };
const RGBA RGBA_NONE = { .rgba = { 0x00, 0x00, 0x00, 0x00 } };
int main(){
auto color = RGBA_WHITE;
cout << color.word << endl;
color = RGBA_RED;
cout << color.word << endl;
return 0;
}
gcc 11.1 и ранее нормально компилируют, gcc 11.2 и trunk выдают ошибку:
source>:18:62: error: too many initializers for 'RGBA::<unnamed union>'
18 | const RGBA RGBA_WHITE = { .rgba = { 0xff, 0xff, 0xff, 0xff } };
| ^
<source>:19:62: error: too many initializers for 'RGBA::<unnamed union>'
19 | const RGBA RGBA_RED = { .rgba = { 0xff, 0x00, 0x00, 0xff } };
| ^