2015-04-23 13 views
5

codice Avendo come segue:miscelazione std :: Move() e std :: filo non compilare

#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 (set di strumenti v110) dà prossimo errore:

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

Cos'è quello? Non possiamo usare spostare la semantica attraverso i thread?

+3

Per quello che vale, questo si compila in g ++ e clang. – user2079303

risposta

9

Questo è un bug in VS. Si può vedere questo:

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

// Iniziato: 4/19/2012 20:58:36, hmm :)

E soluzione dalla loro pagina:

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

Chiuso come fisso, quindi probabilmente è necessario utilizzare mai strumenti o usare 'soluzione alternativa'.

+0

grazie! mi ci sono voluti tre anni per incontrare tale cosa –

+0

[costruttore std :: thread non gestisce oggetto mobile] (https://connect.microsoft.com/VisualStudio/feedback/details/729886/std-thread-constructor-doesnt -handle-mobile-object) dice che è stato corretto in VS 2015 RTM –

Problemi correlati