提问者:小点点

立即函数作为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错误是正确的吗?有什么已知的解决方法吗?


共1个答案

匿名用户

是的,这是一个Clang错误;考虑到std::source_location::current是恒定的,正是为了这种用法。