Я работаю в Visual Studio 2013 и вижу то, что считаю ошибкой, я надеялся, что кто-нибудь подтвердит?
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
for (sregex_iterator i(foo.cbegin(), foo.cend(), regex("(.*)[\n\r]{1,2}")); i != sregex_iterator(); ++i){
bar.push_back(i->operator[](1).str());
}
Этот код попадает в Debug Assertion в библиотеке регулярных выражений Visual Studio:
regex_iterator
осиротел
Если я определяю regex
вне цикла for
, все в порядке:
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
regex bug("(.*)[\n\r]{1,2}");
for (sregex_iterator i(foo.cbegin(), foo.cend(), bug); i != sregex_iterator(); ++i){
bar.push_back(i->operator[](1).str());
}
В качестве альтернативы это отлично работает в преобразовании, как показано в этом вопросе:
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
// This puts {"A", "B", "C"} into bar
transform(sregex_iterator(foo.cbegin(), foo.cend(), regex("(.*)[\n\r]{1,2}")), sregex_iterator(), back_inserter(bar), [](const smatch& i){ return i[1].str(); });
Кто-нибудь может подтвердить, что это ошибка?