gpt4 book ai didi

c++ - 将参数传递给通用 lambda 时复制构造函数不正确

转载 作者:行者123 更新时间:2023-11-30 02:18:12 25 4
gpt4 key购买 nike

考虑这段代码:

template < auto What >
constexpr auto Identity = [](auto&&...) { return What; };

struct Ban
{
Ban() = default;
Ban(const Ban& ban) = delete;
Ban( Ban&& ban) = delete;
};

int main()
{
Ban ban;
Identity<false>(10,ban);

return 0;
}

编译失败 godbolt.org使用 gcc-7.3,因为它试图复制 Identity 的第二个参数。为什么它应该?这是 gcc 中的错误吗?

gcc 不会在第二个参数是临时参数或只有一个参数时提示。当 Identity 的定义是使用 (...) 而不是 (auto&&...) 时,它只会提示一个参数。

最佳答案

前半部分是对旧 GCC 版本中通用 lambda 的 auto&&... 的错误解析:clang vs gcc - empty generic lambda variadic argument pack ; Should non-capturing generic lambdas decay to function pointers? ; Should non-capturing generic lambdas decay to function pointers?

预计下半年。传递 C 风格的 ... 可变参数生成一个拷贝,你删除了你的复制构造函数。

关于c++ - 将参数传递给通用 lambda 时复制构造函数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52532279/

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