当我尝试编译时:
#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接受并按照我的预期编译它。)
答案 0 :(得分:19)
这是gcc bug。它将你的lambda解释如下:
[](auto&&, ...){}
所以有一个参数,其次是C variadic。
如果您为参数包添加名称,则它按预期工作:
[](auto&&... pack){}