On 24/08/16 00:18 -0700, Tim Shen wrote:
I didn't realized that we can actually escape a dash inside bracket
expression: R"([\-])", in which case the dash should be treated
literally.

With this patch applied I no longer get a match for:

 regex_match("-", std::regex{"[a-]", std::regex_constants::basic})

"[-a]" still works correctly, but they should be equivalent for POSIX
BREs and EREs.



diff --git a/libstdc++-v3/include/bits/regex_scanner.h 
b/libstdc++-v3/include/bits/regex_scanner.h
index 37dea84..2a83d1c 100644
--- a/libstdc++-v3/include/bits/regex_scanner.h
+++ b/libstdc++-v3/include/bits/regex_scanner.h
@@ -73,6 +73,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
      _S_token_comma,
      _S_token_dup_count,
      _S_token_eof,
+      _S_token_bracket_dash,
      _S_token_unknown
    };

I wonder if we want to give _S_token_unknown an initializer with a
specific value, so it doesn't change whenever we add new tokens.

If we use -1 it would change the underlying type of
_ScannerBase::_TokenT from unsigned int to signed int, so we should
give it a fixed type too:

 struct _ScannerBase
 {
 public:
   /// Token types returned from the scanner.
   enum _TokenT : unsigned
   {
     ...
     _S_token_unknown = -1u


Reply via email to