clang(trunk) 给出以下代码的错误:
consteval void f() {}
int main()
{
f(); // error: call to consteval function 'f' is not a constant expression
// note: subobject of type 'void' is not initialized
}
而 gcc(trunk) 编译它没有错误。
我觉得这可能是一个 clang 错误,因为 gcc 和 clang 都接受这个代码:
consteval int g() { return 42; }
int main()
{
g(); // ok
}
这是要玩的代码。
那么这是一个clang错误,还是代码格式错误,或者有ub,或者其他什么?
编辑:我觉得有必要指出 clang 允许f
从其他函数调用,如果它们也是 consteval 的话。它仅在f
从非 consteval 函数调用时给出错误:
consteval int h()
{
f(); // ok
return 42;
}
演示。