次のコードを検討してください。
typedef istream_iterator<char> char_itr ;
char_itr eos;
string ll("some text here");
istringstream line_in(ll);
char_itr start(line_in);
move_iterator<char_itr> mstart(start); // !!!
move_iterator<char_itr> meos(eos);
vector<char> vc(mstart, meos);
上記のコードは、次の行のためにコンパイルされません (!!!):
error C2440: 'return' : cannot convert from 'const char' to 'char &&'
しかし、 andをそれぞれ (通常の反復子) および に置き換えるmstart
と、コードはコンパイルされます。なぜ私は作ることができないのですか?meos
start
eos
move_iterators
編集:
なぜストリーム/文字列から文字を移動したいのか疑問に思っている人のために。char
実際の問題には、文字列からのコピーを避けるべきよりも複雑なデータ型が含まれます。char
簡単にするために、エラーの原因となるメカニズムを提示するために使用されました。