После reserve
строка strOut
имеет еще 0 элементов.Таким образом, strOut.begin() == strOut.end()
является истинным, а it
указывает ни на что.Если вы хотите использовать выходной итератор для записи данных в regex_replace
, it
должен указывать на память с достаточным пространством для хранения всех данных.Вы можете исправить это, вызвав resize
вместо reserve
.
Другое решение - использовать back_inserter
для выполнения этой работы (operator=
на этом итераторе выдвигать данные в string
), затем it
не требуется, а код выглядит так:
std::wstring strOut;
boost::xpressive::regex_replace( std::back_inserter(strOut), wEsc.begin() , wEsc.end(), regExp,
wReplaceByText, boost::xpressive::regex_constants::match_not_null );