gpt4 book ai didi

c++ - 为什么我不能将 [](auto&&...){} 转换为 std::function

转载 作者:IT老高 更新时间:2023-10-28 22:13:42 24 4
gpt4 key购买 nike

当我尝试编译时:

#include <functional>

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

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

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

[x86-64 gcc 7.3 #1] error: could not convert '<lambda closure object>g()::<lambda(auto:1&&, ...)>{}' from 'g()::<lambda(auto:1&&, ...)>' to 'std::function<void()>'

有人可以解释为什么这是无效的 c++ 吗?还是我应该提交错误报告? (MSVC 14 接受并将其编译为我所期望的。)

最佳答案

这是 gcc bug .它将您的 lambda 解释如下:

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

所以有一个参数,然后是 C 可变参数。

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

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

关于c++ - 为什么我不能将 [](auto&&...){} 转换为 std::function<void()>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com