Übergeben von Argumenten an std::async Verweis fehl

Habe ich bemerkt, dass es unmöglich ist zu passieren, eine nicht-const-Referenz als argument an std::async.

#include <functional>
#include <future>

void foo(int& value) {}

int main() {
    int value = 23;
    std::async(foo, value);
}

Mein compiler (GCC 4.8.1) gibt den folgenden Fehler für dieses Beispiel:

error: no type named type in class std::result_of<void (*(int))(int&)>’

Aber wenn ich wickeln Sie den Wert übergeben std::async im std::reference_wrapper ist alles OK. Ich gehe davon aus dies ist weil std::async dauert es Argumente von Wert, aber ich verstehe immer noch nicht den Grund für den Fehler.

  • Keine Notwendigkeit zu geben std::reference_wrapper. Verwenden std::ref.
  • Ich verwende std::ref, aber danke für den Tipp 🙂
  • Sie haben zu Graben in den source-code von libstdc++ wenn du daran interessiert bist, den Grund für diesen Fehler ist: gcc.gnu.org/onlinedocs/gcc-4.8.1/libstdc++/api/... Die Zeilennummern zu sehen sind die Fehler. Viel Glück.
  • Bei der Verwendung von libc++ ein ähnlicher Fehler entsteht, d.h., beabsichtigt scheint. Ich konnte nicht finden, dass die Klausel in der standard-Mandatierung dieses Verhalten jedoch. Beachten Sie auch, dass nur mit std::ref() löst nicht das problem: es wird ein anderes! Sie müssen nun sicherstellen, dass die Referenz-variable bleibt genug Zeit.
InformationsquelleAutor lizarisk | 2013-08-21
Schreibe einen Kommentar