为什么在 VS 中需要 packaged_task 的复制构造函数
Why require copy constructor for packaged_task in VS
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 相同的问题)
这是一个known bug in MSVC's packaged_task
implementation. They're storing the callable within std::function
, which requires that的论点copy-constructible。
正如@Praetorian 所说,这是 MSVC 的已知错误。
把lambda 函数与移动捕获std::unique_ptr
, 放入std::packaged_func
给我带来了麻烦。
我正在做 Linux / Windows 跨平台,请注意它在 Linux 系统中运行良好。
使用其原始来源:boost::fibers::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{});
我收到“错误 C2280:'MoveOnlyOperation::MoveOnlyOperation(const MoveOnlyOperation &)':试图引用已删除的函数”
C++ 11 的文档说可以完美转发 packaged_task 中的实例。我对 clang 也没有问题。
它有一些实现定义了关于如何实现 packaged_task 或 VS 2015 中的错误(可能稍后因为我遇到与 http://rextester.com/WBEH22233 相同的问题)
这是一个known bug in MSVC's packaged_task
implementation. They're storing the callable within std::function
, which requires that的论点copy-constructible。
正如@Praetorian 所说,这是 MSVC 的已知错误。
把lambda 函数与移动捕获std::unique_ptr
, 放入std::packaged_func
给我带来了麻烦。
我正在做 Linux / Windows 跨平台,请注意它在 Linux 系统中运行良好。
使用其原始来源:boost::fibers::packaged_task 为我解决了问题。