立即函数作为 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 并且正是用于这种用法。
如果使用立即函数(用 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 并且正是用于这种用法。