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

时间:2018-02-05 17:59:06

标签: c++ gcc lambda

当我尝试编译时:

#include <functional>

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

void g()
{
  f([](auto&&...){});
}

在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接受并按照我的预期编译它。)

1 个答案:

答案 0 :(得分:19)

这是gcc bug。它将你的lambda解释如下:

[](auto&&, ...){}

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

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

[](auto&&... pack){}