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:'MoveOnlyOperation::MoveOnlyOperation(const MoveOnlyOperation&)':尝试引用已删除的函数”
C++ 11的文档说,虽然可以完美地转发packaged_task内的实例。我也没有c的问题。
那里定义了一些实现方式,有关如何实现packaged_task或VS 2015中的错误(可能以后还会出现,因为http://rextester.com/WBEH22233出现相同的问题)
最佳答案
这是MSVC的packaged_task
实现中的known bug。他们将可调用对象存储在std::function
中,requires that参数是可复制构造的。