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()
ストリーム オブジェクトへの右辺値参照を受け入れる existsのオーバーロードはないようです。左辺値を使用するように変更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 でこれをテストすることはできません。