我正在移植旧版 C++ 代码以使用 GCC 9.2。使用 C++20 和 GNU 扩展是有效的选项。
遗留代码大量使用嵌套在联合中的匿名结构和具有指定初始化的聚合初始化,例如:
union u
{
int a;
struct
{
int b;
int c;
};
};
u f = { .b = 1, .c = 2 };
这个例子用 编译clang -std=gnu++2a -Wall -Wextra
,但它不能用 编译g++ -std=gnu++2a -Wall -Wextra
:
错误:“u”的初始化程序太多
由于在代码中应用此类结构的情况很多,因此有必要以自动方式(例如在正则表达式的帮助下)对代码应用潜在的更改。如何通过以自动化方式尽可能少地更改代码来使用 GCC 9.2 编译“此代码”?