2015-04-23 15 views
5

Có mã như sau:Trộn std :: move() và std :: chủ đề sẽ không biên dịch

#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 (bộ công cụ V110) cho lỗi tiếp theo:

error C2664: '_Rx std::_Pmf_wrap<_Pmf_t,_Rx,_Farg0,_V0_t,_V1_t,_V2_t,_V3_t,_V4_t,_V5_t,>::operator()(const _Wrapper &,_V0_t) const' : cannot convert parameter 2 from 'int' to 'int &&'

Cái gì thế? Chúng ta không thể sử dụng ngữ nghĩa di chuyển qua các chủ đề?

+3

Đối với những gì nó có giá trị, điều này không biên dịch trong g ++ và clang. – user2079303

Trả lời

9

Đây là lỗi trong VS. Bạn có thể thấy điều này:

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

// Khai trương: 2012/04/19 20:58:36, hmm :)

Và cách giải quyết từ trang của họ:

You can use std::ref , but it's not the same.

Đóng như cố định, vì vậy có thể bạn cần phải sử dụng không bao giờ công cụ hoặc sử dụng 'cách giải quyết'.

+0

cảm ơn bạn! nó đã cho tôi ba năm để gặp phải với điều như vậy –

+0

[std :: thread constructor không xử lý đối tượng di chuyển] (https://connect.microsoft.com/VisualStudio/feedback/details/729886/std-thread-constructor-doesnt -một đối tượng có thể di chuyển) nói rằng nó đã được sửa trong RTM VS 2015 –

Các vấn đề liên quan