Offensichtlich fehlt die Überladung von getline (), die RRef zum Streamen in GCC 4.7.2 und Clang 3.2 verwendet

Beim Verwenden ist ein unerwarteter Kompilierungsfehler aufgetretengetline() mit einem temporären Stream-Objekt:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string input = "hello\nworld\nof\ndelimiters";

    string line;
    if (getline(stringstream(input), line)) // ERROR!
    {
        cout << line << endl;
    }
}

Es sieht aus wie keine Überlastung vongetline() Gibt es, die einen R-Wert-Verweis auf ein Stream-Objekt akzeptiert. Wenn ich mich änderemain() Um einen lvalue zu verwenden, wird er wie erwartet kompiliert und ausgeführt:

int main()
{
    string input = "hello\nworld\nof\ndelimiters";

    string line;
    stringstream ss(inpupt);
    if (getline(ss, line)) // OK
    {
        cout << line << endl;
    }
}

Also habe ich mir den C ++ 11 Standard angesehen und festgestellt (§ 21.4.8.9), dass eine Überladung vongetline() Das nimmt einen R-Wert-Verweis auf ein Stream-Objektsollte anwesend sein.

Vermisse ich etwas Offensichtliches oder ist das ein Fehler? Der Fehler tritt sowohl bei GCC 4.7.2 als auch bei Clang 3.2 auf. Ich kann das im Moment nicht auf VC testen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage