混合std :: move()和std :: thread将无法编译

时间:2015-04-23 10:03:06

标签: c++ c++11

代码如下:

#include <memory>
#include <thread>

class A
{
  void foo(int&& arg) const {}

  void boo() const 
  {
    int value(0);
    std::thread t(&A::foo, this, std::move(value));
    t.join();
  }

};

int main()
{
  A a;
  return 0;
}

MS Visual Studio 2012(工具集v110)给出了下一个错误:

  

错误C2664:'_ Rx   std :: _ Pmf_wrap&lt; _Pmf_t,_Rx,_Farg0,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,&gt; :: operator()(const _Wrapper&amp;,_ V0_t)const':无法转换参数   2从'int'到'int&amp;&amp;'

那是什么?我们不能通过线程使用移动语义吗?

1 个答案:

答案 0 :(得分:9)

这是VS中的错误。你可以看到这个:

https://connect.microsoft.com/VisualStudio/feedback/details/737812

// 开放日期:2012年4月19日下午8:58:36,嗯:)

从他们的页面解决方法:

  

您可以使用std::ref,但它不一样。

已修复关闭,因此您可能需要使用从不使用工具或使用“解决方法”。