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.