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参数是可复制构造的。

08-06 07:54