2016-05-31 38 views
0

在Visual Studio中給定一個string foo我可以做突破的話成vector左值istringstream istream_iterator是否必需?

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

但這不會在GCC 5.1編譯。我得到的錯誤:

invalid initialization of non-const reference of type std::istream_iterator<std::basic_string<char> >::istream_type& {aka std::basic_istream<char>& } from an rvalue of type std::basic_istream<char>

現在我知道,GCC有a bug這是固定的由我們自己Jonathan Wakely。這是該錯誤的延伸,還是我在這裏使用Rvalue istringstream是非法的?

回答

2

這不是gcc的錯誤,而是evil MSVC extensionstd::istream_iterator::istream_iteraor()需要一個左值引用。由於istringstream(foo)是臨時gcc正確告訴你不能將臨時綁定到左值引用。

這對MSVC起作用的原因是之前提到的允許臨時綁定到左值引用的擴展。這允許非標準兼容代碼在MSVC上工作。

所以回答

Is this an extension of that bug or should it be illegal for me to use an Rvalue istringstream here?

不,這不是一個錯誤,你需要一個非暫時性的流在這裏構建istream_iterator