Очевидно, отсутствует перегрузка getline (), принимающая RRef для потоковой передачи в GCC 4.7.2 и Clang 3.2
Я столкнулся с неожиданной ошибкой компиляции при попытке использоватьgetline()
с временным объектом потока:
#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;
}
}
Похоже, нет перегрузкиgetline()
существует, который принимает rvalue ссылку на объект потока. Если я изменюmain()
чтобы использовать lvalue, он компилируется и запускается как ожидалось:
int main()
{
string input = "hello\nworld\nof\ndelimiters";
string line;
stringstream ss(inpupt);
if (getline(ss, line)) // OK
{
cout << line << endl;
}
}
Итак, я посмотрел в стандарте C ++ 11 и обнаружил (§ 21.4.8.9), что перегрузкаgetline()
которая принимает ссылку на значение rvalue для объекта потокадолжен присутствовать.
Я что-то упускаю очевидное или это ошибка? Ошибка возникает как с GCC 4.7.2, так и с Clang 3.2. Я не могу проверить это на VC в данный момент.