为什么我不能将[](auto && ...){}转换为std :: function <void()>?

B S*_*son 17 c++ lambda gcc

当我尝试编译时:

#include <functional>

void f(std::function<void()> f)
{
}

void g()
{
  f([](auto&&...){});
}
Run Code Online (Sandbox Code Playgroud)

在gcc 7.3上,我收到以下错误:

[x86-64 gcc 7.3#1]错误:无法将' <lambda closure object>g()::<lambda(auto:1&&, ...)>{}'从' g()::<lambda(auto:1&&, ...)>' 转换为' std::function<void()>'

有人可以解释为什么这是无效的c ++?或者我应该提交错误报告?(MSVC 14接受并按照我的预期编译它.)

Gui*_*cot 19

这是一个gcc bug.它解释你的lambda如下:

[](auto&&, ...){}
Run Code Online (Sandbox Code Playgroud)

所以有一个参数,其次是C variadic.

如果您为参数包添加名称,则它按预期工作:

[](auto&&... pack){}
Run Code Online (Sandbox Code Playgroud)