Переназначение std::stringstream работает в Visual Studio 2013, но не в Linux

Я просто пытался скомпилировать следующий код в Linux после полного успеха в Windows:

std::string str = stream.str();

auto decrement = [](char c) { return c - 100; };

std::transform(str.begin(), str.end(), str.begin(), decrement);
stream = std::stringstream(str); // LINE ACCUSING ERROR

Ошибка, которую я получаю при попытке переназначить std::stringstream:

158: ошибка: использование удаленной функции 'std::basic_stringstream& std::basic_stringstream::operator=(const std::basic_stringstream&)' stream = std::stringstream(str); ^


person Alexandre Severino    schedule 25.06.2015    source источник
comment
Какая у вас версия компилятора Linux? Поддерживает ли он С++ 11?   -  person vsoftco    schedule 26.06.2015
comment
Нашел обман: stackoverflow.com/q/27152263/3093378   -  person vsoftco    schedule 26.06.2015


Ответы (1)


std::stringstream не копируется, а только перемещается (начиная с C++11). Я предполагаю, что вы используете g++ 4.9 или более раннюю версию, которая, даже если она поддерживает C++ 11, не полностью поддерживает семантику перемещения для потоков. g++5 и более поздние версии компилируют ваш код.

Сообщенная ошибка восходит к версии 4.7, исправлена ​​в версии 5.x https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54316

person vsoftco    schedule 26.06.2015
comment
Я обновился до g++5, и мой код компилируется. Но теперь дело даже не доходит до начала. Не удается создать поток на std::thread. Как обновить STL? - person Alexandre Severino; 26.06.2015
comment
Попробуйте использовать -pthread . В противном случае не уверен, возможно, попробуйте минимальный пример и задайте другой вопрос. - person vsoftco; 26.06.2015