https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119506
Bug ID: 119506 Summary: <regex>: \cA matches wrong byte Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: blubban at gmail dot com Target Milestone: --- #include <regex> #include <stdio.h> int main() { std::regex r{"\\cA"}; std::cmatch m; bool result1 = std::regex_search("\x01", m, r); printf("search=%d\n", result1); bool result2 = std::regex_search("A", m, r); printf("search=%d\n", result2); try { std::regex r2{"\\c+"}; puts("valid"); } catch (const std::exception&) { puts("invalid"); } } Expected: True, false, invalid. Actual: False, true, valid. libstdc++-v3/include/bits/regex_scanner.tcc line 351 just takes the character after \c as a literal. https://godbolt.org/z/h7M76dej5