invalid initialization of non-const reference from a rvalue

So habe ich folgende Funktion:

void scan(std::istream& is, Handler& h);

Ich möchte es auf verschiedene Arten aufrufen, wie:

scan(std::cin, Handler());
scan(std::ifstream("myfile"), myhandler);

Der Compiler beschwert sich überstd::ifstream("myfile") undHandler() rWerte zu sein, die als Nicht-Konstanten-Referenzen übergeben werden, daher ist die Beschwerde legitim, aber was kann ich tun?

Keiner der Funktionsparameter kann @ seconst (istream wird während des Lesens geändert und der Handler ändert seinen Status während eines Rückrufs.Wenn ich die Parametertypen in rWertreferenzen ändere &&) dann werde ich nicht in der Lage sein, @ zu übergebstd::cin und manchmal kümmert es mich wirklich um den Endzustand vonmyhandler also kann ich mich nicht bewerbenstd::move auf ihnen auch nicht.rundsätzlich könnte ich die Parameter als universelle Referenzen per Template oder @ machauto&& Geben Sie deduction ein und überladen Sie diese Funktion für alle möglichen Kombinationen von lvalue- und rvalue-Referenzen. Ich habe jedoch nicht die Absicht, diese Funktion für andere als die bereits angegebenen Typen zu überladen.

Gibt es noch andere Möglichkeiten?

Irgendwie ist diese ganze Bewegungssemantik in einem so trivialen Beispiel in die Quere gekommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage