Aparentemente, faltando sobrecarga de getline () tendo RRef para transmitir no GCC 4.7.2 e Clang 3.2
Eu corri para um erro de compilação inesperado ao tentar usargetline()
com um objeto de fluxo temporário:
#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 não há sobrecarga degetline()
existe que aceita uma referência rvalue para um objeto de fluxo. Se eu mudarmain()
para usar um lvalue, ele compila e executa conforme o esperado:
int main()
{
string input = "hello\nworld\nof\ndelimiters";
string line;
stringstream ss(inpupt);
if (getline(ss, line)) // OK
{
cout << line << endl;
}
}
Então eu dei uma olhada no C ++ 11 Standard e descobri (§ 21.4.8.9) que uma sobrecarga degetline()
que leva uma referência de valor a um objeto de fluxodevemos estar presente.
Estou faltando alguma coisa óbvia, ou isso é um bug? O erro ocorre tanto com o GCC 4.7.2 como com o Clang 3.2. Eu não posso testar isso no VC no momento.