std :: async Verfall (Verlust) Rvalue-Referenz in Visual Studio 2012 Update 2. Problemumgehungen?

8

Betrachten Sie den folgenden Code:

%Vor%

Das obige schlägt mit dem folgenden Compiler-Fehler fehl:

  

Fehler 1 Fehler C2664: 'ungültig   Test2 :::: Betreiber   () (std :: future & lt; _Ty & gt; & amp; & amp; Work) const ': kann den Parameter 1 nicht aus konvertieren   'std :: Zukunft & lt; _Ty & gt;' zu 'std :: future & lt; _Ty & gt; & amp; & amp; ' c: \ Programmdateien   (x86) \ Microsoft Visual Studio   11.0 \ vc \ include \ xrefwrap 98 1 ConsoleApplication6

GCC 4.7.2 kompiliert gut Ссылка

Bevor ich fortfahre und es auf Microsoft Connect berichte:

1) Ist das ein Fehler auf VC11 oder ist das eigentlich Standardverhalten?

2) Kennt jemand eine Abhilfe dafür?

EDIT: Ich habe es auf Microsoft Connect hier . Um eine schnellere Lösung zu erhalten, sollten Sie diese aktualisieren.

    
Ed Rowlett-Barbu 22.04.2013, 05:54
quelle

1 Antwort

5

Hm, es scheint ein Fehler in VC11 zu sein. Offenbar werden die Argumente von der Implementierung von async nicht wirklich weitergeleitet, sondern kopiert.

Von meinem Kopf her würde ich einen kleinen Wrapper für den rvalue erstellen, der sich bewegt - konstruiert das Element, wenn der Wrapper kopiert wird:

%Vor%

Dann müssten Sie Ihr Testszenario ändern, so dass das Lambda in Test2 den Wrapper anstelle von future selbst verwendet:

%Vor%

Sieht ein bisschen hässlich aus, aber zumindest kompiliert es. Hoffe das hilft dir!

    
user2218982 22.04.2013, 09:22
quelle