Lvalue istringstream istream_iterator是否必需?

时间:2016-05-31 12:58:08

标签: c++ visual-studio istringstream istream-iterator gcc5

在Visual Studio中给定string foo我可以通过执行以下操作将单词划分为vector

vector fooVec{ istream_iterator<string>(istringstream(foo)), istream_iterator<string>() };

但这不会在gcc 5.1中编译。我收到错误:

  

从类型为std::istream_iterator<std::basic_string<char> >::istream_type&

的右值开始,对std::basic_istream<char>& {aka std::basic_istream<char>}类型的非const引用进行无效初始化

现在我知道gcc已a bug由我们自己的Jonathan Wakely修复。这是该bug的扩展还是在我这里使用Rvalue istringstream是否合法?

1 个答案:

答案 0 :(得分:2)

这不是gcc错误,而是evil MSVC extensionstd::istream_iterator::istream_iteraor()需要左值引用。由于istringstream(foo)是临时gcc,因此正确告诉您无法将临时值绑定到左值引用。

这适用于MSVC的原因是前面提到的扩展允许临时值绑定到左值引用。这允许非标准兼容代码在MSVC上工作。

所以回答

  

这是该bug的扩展还是在我这里使用Rvalue istringstream是否合法?

这不是一个错误,你需要一个非临时流来构建istream_iterator