当我尝试编译时:
#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)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |