为什么在 VS 中需要复制构造函数来packaged_task

Why require copy constructor for packaged_task in VS

本文关键字:构造函数 packaged task 复制 VS 为什么      更新时间:2023-10-16
class MoveOnlyOperation
{
public:
MoveOnlyOperation()                         = default;
MoveOnlyOperation(const MoveOnlyOperation&) = delete;
MoveOnlyOperation(MoveOnlyOperation&&)      = default;
int operator()()
{
return 0;
}
};

我想像这样将对象实例包装在packaged_task中:

std::packaged_task<void()> task(MoveOnlyOperation{}); 

我收到"错误 C2280:'仅移动操作::仅移动操作(常量仅移动操作 &)":尝试引用已删除的函数">

C++ 11的文档说,可以在packaged_task内完美地转发实例。我也没有叮当声的问题。

它定义了关于如何实现packaged_task或VS 2015中的错误(可能稍后,因为我在 http://rextester.com/WBEH22233 中遇到了同样的问题)

这是 MSVCpackaged_task实现中的一个已知错误。它们将可调用存储在std::function中,这要求参数是可复制构造的。

正如@Praetorian所说,这是MSVC的已知错误。

它给我带来了麻烦,将带有移动捕获std::unique_ptr的 lambda 函数放入std::packaged_func中。 我正在做Linux/Windows跨平台,请注意它在Linux系统中运行良好。

使用其原始来源:boost::fibers::p ackaged_task为我解决了问题。