-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Description
Describe the bug
The standard has a set of std::regex_constants
values defined for regex errors, but doesn't define a value for every possible kind of error; for example, an empty pattern that only contains lookbehind. We probably need to add the missing constant to the standard somehow.
Boost uses error_bad_pattern
for this case.
Command-line test case
STL version (git commit or Visual Studio version): Visual Studio 2019 version 16.4
C:\Users\bion\Desktop>type test.cpp
#include <regex>
#include <stdio.h>
int main() {
try {
std::regex r(R"((?<=abc))");
puts("Parsing regex succeeded.");
} catch (const std::regex_error &r) {
switch (r.code()) {
case std::regex_constants::error_collate:
case std::regex_constants::error_ctype:
case std::regex_constants::error_escape:
case std::regex_constants::error_backref:
case std::regex_constants::error_brack:
case std::regex_constants::error_paren:
case std::regex_constants::error_brace:
case std::regex_constants::error_badbrace:
case std::regex_constants::error_range:
case std::regex_constants::error_space:
case std::regex_constants::error_badrepeat:
case std::regex_constants::error_complexity:
case std::regex_constants::error_stack:
puts("Got a standard regex error code.");
break;
default:
puts("Got a nonstandard regex error code.");
break;
}
puts(r.what());
}
}
C:\Users\bion\Desktop>cl /EHsc /W4 /WX /std:c++latest /nologo .\test.cpp
test.cpp
C:\Users\bion\Desktop>.\test.exe
Got a nonstandard regex error code.
regex_error(error_syntax)
C:\Users\bion\Desktop>
Expected behavior
The standard should describe every possible value regex_error::code()
can return.
This is a dual of Microsoft-internal VSO-173840 / AB#173840.
vNext note: Resolving this issue will require breaking binary compatibility. We won't be able to accept pull requests for this issue until the vNext branch is available. See #169 for more information.