考虑这段代码:
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/