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()
接受对流对象的右值引用的存在重载。如果我更改main()
为使用左值,它将按预期编译和运行:
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()
存在对流对象进行右值引用的重载。
我是否遗漏了一些明显的东西,或者这是一个错误?GCC 4.7.2 和 Clang 3.2 都会出现该错误。我目前无法在 VC 上对此进行测试。