Najwyraźniej brakuje przeciążenia getline () biorącego RRef do strumienia w GCC 4.7.2 i Clang 3.2

Wystąpił nieoczekiwany błąd kompilacji podczas próby użyciagetline() z tymczasowym obiektem strumienia:

#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;
    }
}

Wygląda na to, że nie ma przeciążeniagetline() istnieje, że akceptuje odwołanie do wartości rvalue do obiektu strumienia. Jeśli się zmienięmain() aby użyć wartości l, kompiluje się i działa zgodnie z oczekiwaniami:

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

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

Spojrzałem więc na C ++ 11 Standard i dowiedziałem się (§ 21.4.8.9), że jest przeciążeniegetline() pobiera odniesienie do wartości rvalue do obiektu strumieniapowinien być obecnym.

Czy brakuje mi czegoś oczywistego, czy jest to błąd? Błąd występuje zarówno w GCC 4.7.2, jak iw Clang 3.2. W tej chwili nie mogę tego przetestować na VC.

questionAnswers(1)

yourAnswerToTheQuestion