c++ - 为什么需要在 VS 中为 packaged_task 复制构造函数

标签 c++ visual-studio c++11 packaged-task

class MoveOnlyOperation
{
public:
    MoveOnlyOperation()                         = default;
    MoveOnlyOperation(const MoveOnlyOperation&) = delete;
    MoveOnlyOperation(MoveOnlyOperation&&)      = default;

    int operator()()
    {
        return 0;
    }
};

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

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

我收到“error C2280: 'MoveOnlyOperation::MoveOnlyOperation(const MoveOnlyOperation &)': attempting to reference a deleted function

C++ 11 的文档说可以完美转发 packaged_task 中的实例。我对 clang 也没有问题。

它有一些实现定义了关于如何实现 packaged_task 或 VS 2015 中的一个错误(可能在以后因为我遇到了与 http://rextester.com/WBEH22233 相同的问题)

最佳答案

这是一个 known bug在 MSVC 的 packaged_task 实现中。他们将可调用对象存储在 std::function 中,requires that参数是可复制构造的。

关于c++ - 为什么需要在 VS 中为 packaged_task 复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48995633/

相关文章:

visual-studio - 在 Resharper 的 "Find Results window"中显示文本搜索结果

vb.net - MDX 查询返返回告中的值,但不返回 Visual Basic 代码中的值

c++ - 数组初始化编译时间 - Constexpr 序列

android - Qt Android qApp->primaryScreen()->availableGeometry() 返回 0x0

c++ - 如何在执行期间停止 C++ 应用程序以调试到 dll?

c++ - 在 AD 服务器上使用 winldap.h 进行 LDAP 搜索

c++ - 了解零规则

c++ - 将 Type&&(右值引用)绑定(bind)到可修改的左值和

c++ - win32原始键盘输入删除自动重复

c++ - 其他 .exe 中的编码/修补变量