为什么我不能在gcc的初始化程序中访问默认参数?

tem*_*boy 8 c++ language-lawyer c++11

这是在clang编译而不是在gcc编译:

void f(int x = decltype(x){});
Run Code Online (Sandbox Code Playgroud)

gcc中的错误表示x未在此范围内声明,但根据3.3.2/1,变量x应在范围内:

声明的声明就在其完整的声明者(第8条)之后和初始化者(如果有的话)之前,除非如下所述.[例:

int x = 12;
{ int x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个x用自己的(不确定的)值初始化. - 结束例子]

clang是否正确?应该x可以在自己的初始化程序中访问?

PS:int x = x作为参数在两个编译器中都失败但我不知道为什么.

Mik*_*our 10

GCC是正确的; 那是无效的.

C++ 11 8.3.6/9 [dcl.fct.default]函数的参数不应在默认参数中使用,即使它们未被计算.