函数作用域内的函数声明是否可以将本地定义的常量作为默认参数?
例如,
void f(int) {}
int main() {
constexpr int c = 1;
void f(int = c);
f();
}
GCC 不喜欢它,并说
错误:局部变量‘c’不得出现在此上下文中
MSVC 的行为类似:
错误 C2587:‘c’:非法使用局部变量作为默认参数
但 Clang 可以很好地接受它。在线演示:https://gcc.godbolt.org/z/9vWoK6TEz
这里哪种实现是正确的?