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で同じ問題が発生するため、おそらく後で)