std::move of std::packaged_task<void()> 不编译 (vs2013)
std::move of std::packaged_task<void()> does not compile (vs2013)
std::move
doe 在移动 std::packaged_task<void()>
对象时无法编译。
错误是:
错误 C2182:“_Get_value”:非法使用类型 'void'
错误 C2182:“_Val”:非法使用类型 'void'
错误 C2182:“_Val”:非法使用类型 'void'
错误 C2665:'std::forward':2 个重载中的 none 可以转换所有参数类型
错误 C2512:'std::_Promise':没有合适的默认构造函数可用
密码是:
struct CalcFib
{
int m_num;
int m_res;
CalcFib(int number) :m_num(number)
{
}
CalcFib() :m_num(0)
{
}
void operator()()
{
m_res = fib(m_num);
}
int fib(int num)
{
if (num < 2) return num;
else return fib(num - 1) + fib(num - 2);
}
};
std::packaged_task<void()> task(std::move(CalcFib(30)));
std::packaged_task<void()> task1 = std::move(task);
这段代码编译成功:
struct CalcFib
{
int m_num;
int m_res;
CalcFib(int number) :m_num(number)
{
}
CalcFib() :m_num(0)
{
}
int operator()()
{
m_res = fib(m_num);
return m_res;
}
int fib(int num)
{
if (num < 2) return num;
else return fib(num - 1) + fib(num - 2);
}
};
std::packaged_task<int()> task(std::move(CalcFib(30)));
std::packaged_task<int()> task1 = std::move(task);
similar issue was asked here but has not answer
这是 visual studio 编译器错误,我通过实施 packaged_task here
找到了一个很好的解决方案
std::move
doe 在移动 std::packaged_task<void()>
对象时无法编译。
错误是:
错误 C2182:“_Get_value”:非法使用类型 'void'
错误 C2182:“_Val”:非法使用类型 'void'
错误 C2182:“_Val”:非法使用类型 'void'
错误 C2665:'std::forward':2 个重载中的 none 可以转换所有参数类型
错误 C2512:'std::_Promise':没有合适的默认构造函数可用
密码是:
struct CalcFib
{
int m_num;
int m_res;
CalcFib(int number) :m_num(number)
{
}
CalcFib() :m_num(0)
{
}
void operator()()
{
m_res = fib(m_num);
}
int fib(int num)
{
if (num < 2) return num;
else return fib(num - 1) + fib(num - 2);
}
};
std::packaged_task<void()> task(std::move(CalcFib(30)));
std::packaged_task<void()> task1 = std::move(task);
这段代码编译成功:
struct CalcFib
{
int m_num;
int m_res;
CalcFib(int number) :m_num(number)
{
}
CalcFib() :m_num(0)
{
}
int operator()()
{
m_res = fib(m_num);
return m_res;
}
int fib(int num)
{
if (num < 2) return num;
else return fib(num - 1) + fib(num - 2);
}
};
std::packaged_task<int()> task(std::move(CalcFib(30)));
std::packaged_task<int()> task1 = std::move(task);
similar issue was asked here but has not answer
这是 visual studio 编译器错误,我通过实施 packaged_task here
找到了一个很好的解决方案