立即函数作为 Clang++ 中的默认函数参数初始值设定项

Immediate function as default function argument initializer in Clang++

如果使用立即函数(用 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 错误是否正确?有任何已知的解决方法吗?

是的,这是一个 Clang 错误;考虑到 std::source_location::current 是 consteval 并且正是用于这种用法。