https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64302
Bug ID: 64302 Summary: The match_results::cbegin()/cend() return incorrect results Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: kariya_mitsuru at hotmail dot com Created attachment 34277 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34277&action=edit g++ -v The match_results::cbegin()/cend() should return identical results as the match_results::begin()/end() but the match_results::cbegin()/cend() return incorrect results by libstdc++. ============================== sample code ============================== #include <iostream> #include <regex> #include <string> int main() { std::string s(" 111 222 "); std::regex re("(\\d+)\\s+(\\d+)"); std::smatch m; if (std::regex_search(s, m, re)) { std::cout << "begin - end" << std::endl; for (auto&& it = m.begin(), end = m.end(); it != end; ++it) { std::cout << '\'' << *it << '\'' << std::endl; } std::cout << "cbegin - cend" << std::endl; for (auto&& it = m.cbegin(), end = m.cend(); it != end; ++it) { std::cout << '\'' << *it << '\'' << std::endl; } } else { std::cout << "unmatch!" << std::endl; } } ========================================================================= ============================= output ============================= begin - end '111 222' '111' '222' cbegin - cend '222' ' ' ' ' ================================================================== cf. http://melpon.org/wandbox/permlink/Xhkav0mRRdT5wRXw According to the C++11 standard 28.10.4[re.results.acc]/p.13 & p.14, the match_results::cbegin()/cend() has same difinitions as the match_results::begin()/end().