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