在下一个程序struct B
中有立即consteval
默认构造函数,它不初始化i
字段。然后这个构造函数被用来做一个临时的,它的i
字段保持不变:
struct B {
bool b = true;
int i;
consteval B() {}
};
static_assert( B{}.b );
Clang 和 MSVC 都可以。但 GCC 抱怨:
error: 'B{true}' is not a constant expression
7 | static_assert( B{}.b );
| ^
error: 'B()' is not a constant expression because it refers to an incompletely initialized variable
演示:https ://gcc.godbolt.org/z/x4n6ezrhT
哪个编译器在这里?