2015-04-23 32 views
5

Having kodu derlemek olmaz:Karıştırma std :: hareket() ve std :: iplik

#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 (araç grubu v110) sonraki hata veriyor:

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 &&'

Bu da ne? Anlambilimsel konuları thread'lerden kullanamaz mıyız?

+3

Değeri için, bu g ++ ve clang derlemesini derler. – user2079303

cevap

9

Bu VS'de bir hatadır. Bunu görebilirsiniz:

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

// Açıldı: 2012/04/19 20:58:36 hmm :) VKG sayfasından

Ve geçici çözümü:

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

Sabit olarak kapalı, bu yüzden muhtemelen hiçbir zaman araç kullanmamalısınız ya da 'geçici çözüm' kullanmalısınız.

+0

Teşekkürler! –

+0

[std :: thread constructor taşınır nesneyi işlemez] ile karşılaşmak üç yılımı aldı (https://connect.microsoft.com/VisualStudio/feedback/details/729886/std-thread-constructor-doesnt -handle-hareketli nesne) VS 2015 RTM içinde sabit olduğunu söylüyor –