Очевидно, отсутствует перегрузка 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 в данный момент.

Ответы на вопрос(1)

Ваш ответ на вопрос