Aparentemente, falta la sobrecarga de getline () que lleva RRef a la transmisión en GCC 4.7.2 y Clang 3.2

Me encontré con un error de compilación inesperado al intentar usargetline() con un objeto de flujo temporal:

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

Parece que no hay sobrecarga degetline() existe que acepta una referencia de valor a un objeto de flujo. Si cambiomain() para usar un valor lime, se compila y se ejecuta como se espera:

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

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

Así que eché un vistazo al estándar C ++ 11 y descubrí (§ 21.4.8.9) que una sobrecarga degetline() que toma una referencia rvalue a un objeto de flujodebería estar.

¿Me estoy perdiendo algo obvio, o esto es un error? El error ocurre tanto con GCC 4.7.2 como con Clang 3.2. No puedo probar esto en VC en este momento.

Respuestas a la pregunta(1)

Su respuesta a la pregunta