4

如果使用立即函数(用 声明consteval)来默认初始化全局函数参数,如这里

consteval int foo() { return 0; }
int bar(int a = foo()) { return a; }
int main() { return bar(); }

然后 Clang 编译器发出错误:

error: cannot take address of consteval function 'foo' outside of an immediate invocation
int bar(int a = foo()) { return a; }
                ^

当其他编译器接受代码时,演示:https ://gcc.godbolt.org/z/z8h7MPaGx

假设代码格式正确并且只是一个 Clang 错误是否正确?有什么已知的解决方法吗?

4

1 回答 1

4

是的,这是一个 Clang 错误;认为这std::source_location::current是 consteval 并且正是为了这种用法。

于 2021-08-15T09:26:09.163 回答