以下代码使用g++ 7.3.0编译成功,而使用clang++ 6.0.0编译失败(编译标志为-std=c++17 -Wall -Wextra -Werror -pedantic-errors
):
auto foo = [](auto, auto... tail) {
if constexpr (sizeof...(tail) > 0)
{
return foo(tail...);
}
else
{
return 42;
}
};
int main()
{
}
clang++编译错误信息:
错误:用推导类型 'auto' 声明的变量 'foo' 不能出现在它自己的初始化程序中
return foo(tail...);
在这种情况下,什么行为符合标准?