4
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 内のインスタンスを完全転送できると書かれています。また、clangに問題はありません。

packaged_task の実装方法または VS 2015 のバグについて定義された実装があります ( http://rextester.com/WBEH22233で同じ問題が発生するため、おそらく後で)

4

2 に答える 2