非捕获通用lambda是否应该衰减到函数指针?

sky*_*ack 7 c++ gcc clang generic-lambda c++14

请考虑以下代码:

int main() {
    auto l = [](auto){};
    void(*p)(int) = l;
}
Run Code Online (Sandbox Code Playgroud)

它与GCCclang一起工作得很好.
让我们考虑以下略微修改的版本:

int main() {
    auto l = [](auto...){};
    void(*p)(int) = l;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,clang仍然接受它,而GCC 拒绝它.

是否有任何理由拒绝此代码或是否是编译器的错误?


我打算提出一个问题,但我想知道是否有任何提案可以由其中一个提出,而不是由另一个提出.

T.C*_*.C. 11

这是一个已知GCC解析错误(64095,68071):[](auto...){}被错误地解析等[](auto, ...) {},而不是[](auto...x){}; 省略号被解析为C风格的变量而不是声明参数包(在语言 - 律师术语中,它被解析为参数声明子句的一部分而不是抽象声明,违反了[dcl.fct]/17).

不言而喻,这[](auto, ...){}是不可兑现的void (*)(int).

解决方法是给包装一个名字; 如果你这样做,你会看到转换成功编译.