1aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//===----------------------------------------------------------------------===//
2aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//
3aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//                     The LLVM Compiler Infrastructure
4aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//
8aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//===----------------------------------------------------------------------===//
9aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant
10aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant// <regex>
11aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant
12aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant// template <class BidirectionalIterator, class Allocator, class charT, class traits>
13aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//     bool
14aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//     regex_match(BidirectionalIterator first, BidirectionalIterator last,
15aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//                  match_results<BidirectionalIterator, Allocator>& m,
16aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//                  const basic_regex<charT, traits>& e,
17aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant//                  regex_constants::match_flag_type flags = regex_constants::match_default);
18aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant
19aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant#include <regex>
20aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant#include <cassert>
21aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant
2283e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h"
23aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant
24aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnantint main()
25aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant{
26aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
27aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
28aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "a";
29aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a")));
30aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
31aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.empty());
32aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
33aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
34aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
35aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
36aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
37aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+1);
38aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
39aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
40aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == "a");
41aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
42aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
43aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
44aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "ab";
45aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("ab")));
46aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
47aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
48aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
49aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
50aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
51aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
52aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+2);
53aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 2);
54aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
55aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == "ab");
56aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
57aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
58aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
59aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "ab";
60aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("ba")));
61aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
62aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.empty());
63aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
64aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
65aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
66aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "aab";
67aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("ab")));
68aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
69aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
70aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
71aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
72aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "aab";
73aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("ab"),
74aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant                                            std::regex_constants::match_continuous));
75aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
76aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
77aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
78aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
79aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abcd";
80aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("bc")));
81aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
82aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
83aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
84aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
85aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abbc";
86aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("ab*c")));
87aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
88aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
89aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
90aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
91aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
92aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
93aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+4);
94aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 4);
95aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
96aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
97aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
98aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
99aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
100aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "ababc";
101aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("(ab)*c")));
102aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 2);
103aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
104aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
105aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
106aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
107aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
108aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+5);
109aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 5);
110aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
111aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
112aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(1) == 2);
113aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(1) == 2);
114aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(1) == "ab");
115aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
116aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
117aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
118aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abcdefghijk";
119aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("cd((e)fg)hi")));
120aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
121aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
122aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
123aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
124aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abc";
125aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("^abc")));
126aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
127aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
128aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
129aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
130aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
131aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
132aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
133aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
134aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
135aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
136aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
137aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
138aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
139aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abcd";
140aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("^abc")));
141aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
142aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
143aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
144aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
145aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "aabc";
146aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("^abc")));
147aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
148aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
149aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
150aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
151aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abc";
152aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("abc$")));
153aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
154aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
155aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
156aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
157aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
158aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
159aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
160aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
161aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
162aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
163aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
164aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
165aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
166aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "efabc";
167aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("abc$")));
168aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
169aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
170aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
171aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
172aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "efabcg";
173aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("abc$")));
174aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
175aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
176aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
177aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
178aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abc";
179aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a.c")));
180aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
181aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
182aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
183aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
184aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
185aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
186aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
187aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
188aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
189aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
190aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
191aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
192aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
193aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "acc";
194aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a.c")));
195aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
196aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
197aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
198aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
199aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
200aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
201aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
202aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
203aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
204aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
205aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
206aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
207aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
208aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "acc";
209aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a.c")));
210aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
211aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
212aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
213aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
214aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
215aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
216aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
217aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
218aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
219aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
220aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
221aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
222aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
223aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abcdef";
224aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("(.*).*")));
225aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 2);
226aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
227aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
228aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
229aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
230aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
231aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+6);
232aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 6);
233aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
234aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
235aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(1) == 6);
236aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(1) == 0);
237aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(1) == s);
238aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
239aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
240aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
241aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "bc";
242aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("(a*)*")));
243aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
244aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
245aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
246aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
247aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abbc";
248aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("ab{3,5}c")));
249aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
250aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
251aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
252aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
253aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abbbc";
254aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("ab{3,5}c")));
255aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
256aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
257aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
258aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
259aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
260aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
261aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
262aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
263aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
264aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
265aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
266aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
267aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
268aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abbbbc";
269aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("ab{3,5}c")));
270aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
271aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
272aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
273aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
274aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
275aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
276aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
277aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
278aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
279aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
280aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
281aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
282aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
283aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abbbbbc";
284aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("ab{3,5}c")));
285aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
286aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
287aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
288aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
289aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
290aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
291aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
292aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
293aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
294aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
295aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
296aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
297aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
298aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "adefc";
299aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("ab{3,5}c")));
300aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
301aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
302aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
303aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
304aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "abbbbbbc";
305aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("ab{3,5}c")));
306aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
307aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
308aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
309aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
310aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "adec";
311aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("a.{3,5}c")));
312aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
313aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
314aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
315aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
316aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "adefc";
317aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a.{3,5}c")));
318aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
319aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
320aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
321aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
322aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
323aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
324aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
325aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
326aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
327aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
328aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
329aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
330aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
331aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "adefgc";
332aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a.{3,5}c")));
333aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
334aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
335aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
336aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
337aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
338aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
339aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
340aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
341aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
342aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
343aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
344aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
345aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
346aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "adefghc";
347aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("a.{3,5}c")));
348aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
349aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
350aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
351aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
352aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
353aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
354aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
355aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
356aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
357aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
358aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
359aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
360aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
361aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "adefghic";
362aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("a.{3,5}c")));
363aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
364aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
365aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
366aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
367aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "tournament";
368aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("tour|to|tournament")));
369aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
370aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
371aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
372aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
373aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "tournamenttotour";
374aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("(tour|to|tournament)+",
375aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant               std::regex_constants::nosubs)));
376aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
377aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
378aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
379aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
380aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "ttotour";
381aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("(tour|to|t)+")));
382aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 2);
383aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
384aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
385aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
386aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
387aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
388aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
389aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
390aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
391aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
392aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(1) == 4);
393aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(1) == 3);
394aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(1) == "tour");
395aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
396aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
397aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
398aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "-ab,ab-";
399aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("-(.*),\1-")));
400aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
401aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
402aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
403aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
404aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "-ab,ab-";
405aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("-.*,.*-")));
406aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
407aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
408aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
409aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
410aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
411aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
412aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
413aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
414aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
415aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
416aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
417aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
418aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
419aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "a";
420aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("^[a]$")));
421aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
422aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
423aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
424aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
425aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
426aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
427aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
428aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
429aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
430aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == "a");
431aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
432aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
433aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
434aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "a";
435aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("^[ab]$")));
436aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
437aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
438aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
439aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
440aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
441aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
442aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
443aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
444aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
445aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == "a");
446aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
447aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
448aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
449aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "c";
450aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("^[a-f]$")));
451aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
452aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
453aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
454aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
455aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
456aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
457aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
458aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
459aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
460aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
461aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
462aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
463aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
464aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "g";
465aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("^[a-f]$")));
466aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
467aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
468aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
469aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
470aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "Iraqi";
471aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("q[^u]")));
472aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
473aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
474aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
475aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
476aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "Iraq";
477aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("q[^u]")));
478aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
479aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
480aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
481aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
482aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "AmB";
483aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("A[[:lower:]]B")));
484aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
485aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
486aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
487aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
488aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
489aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
490aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
491aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
492aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
493aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
494aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
495aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
496aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
497aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "AMB";
498aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("A[[:lower:]]B")));
499aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
500aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
501aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
502aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
503aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "AMB";
504aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("A[^[:lower:]]B")));
505aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
506aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
507aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
508aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
509aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
510aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
511aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
512aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
513aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
514aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
515aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
516aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
517aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
518aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "AmB";
519aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("A[^[:lower:]]B")));
520aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
521aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
522aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
523aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
524aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "A5B";
525aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B")));
526aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
527aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
528aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
529aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
530aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "A?B";
531aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("A[^[:lower:]0-9]B")));
532aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
533aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
534aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
535aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
536aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
537aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
538aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
539aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
540aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
541aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
542aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
543aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
544aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
545aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "-";
546aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]")));
547aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
548aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
549aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
550aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
551aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
552aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
553aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
554aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
555aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
556aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
557aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
558aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
559aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
560aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "z";
561aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("[a[.hyphen.]z]")));
562aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
563aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
564aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
565aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
566aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
567aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
568aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
569aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
570aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
571aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
572aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
573aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
574aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
575aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "m";
576aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("[a[.hyphen.]z]")));
577aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
578aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
579aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    std::locale::global(std::locale("cs_CZ.ISO8859-2"));
580aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
581aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
582aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "m";
583aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("[a[=M=]z]")));
584aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
585aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
586aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
587aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
588aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
589aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
590aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
591aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
592aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
593aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
594aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
595aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
596aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
597aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "Ch";
598aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("[a[.ch.]z]",
599aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant                   std::regex_constants::icase)));
600aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
601aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
602aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
603aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
604aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
605aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
606aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
607aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
608aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
609aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
610aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
6110ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow    {
6120ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        std::cmatch m;
6130ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        const char s[] = "foobar";
6140ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        assert(std::regex_match(s, m, std::regex("[^\\0]*")));
6150ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        assert(m.size() == 1);
6160ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow    }
6170ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow    {
6180ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        std::cmatch m;
6190ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        const char s[] = "foo\0bar";
6200ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        assert(std::regex_match(s, s+7, m, std::regex("[abfor\\0]*")));
6210ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow        assert(m.size() == 1);
6220ac811445c369a7b1ee798ec5281557ee6306707Marshall Clow    }
623aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    std::locale::global(std::locale("C"));
624aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
625aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
626aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "m";
627aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("[a[=M=]z]")));
628aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
629aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
630aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
631aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
632aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "01a45cef9";
633aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("[ace1-9]*")));
634aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
635aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
636aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
637aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
638aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "01a45cef9";
639aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("[ace1-9]+")));
640aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
641aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
642aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
643aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char r[] = "^[-+]?[0-9]+[CF]$";
644aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::ptrdiff_t sr = std::char_traits<char>::length(r);
645aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        typedef forward_iterator<const char*> FI;
646aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        typedef bidirectional_iterator<const char*> BI;
647aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::regex regex(FI(r), FI(r+sr));
648aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::match_results<BI> m;
649aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "-40C";
650aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::ptrdiff_t ss = std::char_traits<char>::length(s);
651aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(BI(s), BI(s+ss), m, regex));
652aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
653aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
654aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == BI(s));
655aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
656aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
657aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
658aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
659aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 4);
660aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
661aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
662aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
663aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
664aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
665aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "Jeff Jeffs ";
666aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("Jeff(?=s\\b)")));
667aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
668aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
669aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
670aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
671aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "Jeffs Jeff";
672aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::regex("Jeff(?!s\\b)")));
673aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
674aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
675aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
676aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::cmatch m;
677aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const char s[] = "5%k";
678aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::regex("\\d[\\W]k")));
679aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
680aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
681aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
682aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
683aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
684aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
685aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s + std::char_traits<char>::length(s));
686aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
687aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
688aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
689aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
690aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant
691aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
692aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
693aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"a";
694aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a")));
695aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
696aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.empty());
697aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
698aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
699aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
700aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
701aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
702aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+1);
703aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
704aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
705aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == L"a");
706aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
707aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
708aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
709aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"ab";
710aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"ab")));
711aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
712aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
713aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
714aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
715aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
716aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
717aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+2);
718aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 2);
719aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
720aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == L"ab");
721aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
722aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
723aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
724aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"ab";
725aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"ba")));
726aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
727aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.empty());
728aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
729aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
730aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
731aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"aab";
732aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"ab")));
733aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
734aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
735aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
736aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
737aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"aab";
738aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"ab"),
739aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant                                            std::regex_constants::match_continuous));
740aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
741aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
742aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
743aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
744aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abcd";
745aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"bc")));
746aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
747aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
748aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
749aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
750aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abbc";
751aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"ab*c")));
752aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
753aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
754aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
755aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
756aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
757aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
758aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+4);
759aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 4);
760aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
761aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
762aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
763aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
764aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
765aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"ababc";
766aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"(ab)*c")));
767aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 2);
768aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
769aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
770aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
771aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
772aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
773aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+5);
774aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 5);
775aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
776aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
777aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(1) == 2);
778aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(1) == 2);
779aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(1) == L"ab");
780aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
781aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
782aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
783aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abcdefghijk";
784aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"cd((e)fg)hi")));
785aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
786aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
787aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
788aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
789aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abc";
790aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"^abc")));
791aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
792aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
793aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
794aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
795aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
796aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
797aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
798aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
799aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
800aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
801aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
802aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
803aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
804aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abcd";
805aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"^abc")));
806aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
807aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
808aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
809aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
810aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"aabc";
811aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"^abc")));
812aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
813aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
814aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
815aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
816aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abc";
817aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"abc$")));
818aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
819aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
820aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
821aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
822aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
823aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
824aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
825aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
826aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
827aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
828aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
829aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
830aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
831aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"efabc";
832aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"abc$")));
833aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
834aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
835aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
836aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
837aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"efabcg";
838aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"abc$")));
839aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
840aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
841aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
842aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
843aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abc";
844aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a.c")));
845aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
846aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
847aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
848aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
849aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
850aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
851aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
852aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
853aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
854aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
855aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
856aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
857aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
858aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"acc";
859aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a.c")));
860aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
861aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
862aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
863aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
864aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
865aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
866aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
867aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
868aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
869aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
870aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
871aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
872aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
873aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"acc";
874aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a.c")));
875aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
876aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
877aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
878aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
879aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
880aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
881aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+3);
882aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 3);
883aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
884aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
885aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
886aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
887aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
888aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abcdef";
889aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"(.*).*")));
890aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 2);
891aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
892aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
893aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
894aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
895aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
896aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s+6);
897aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 6);
898aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
899aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
900aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(1) == 6);
901aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(1) == 0);
902aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(1) == s);
903aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
904aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
905aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
906aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"bc";
907aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"(a*)*")));
908aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
909aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
910aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
911aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
912aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abbc";
913aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c")));
914aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
915aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
916aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
917aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
918aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abbbc";
919aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c")));
920aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
921aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
922aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
923aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
924aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
925aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
926aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
927aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
928aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
929aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
930aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
931aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
932aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
933aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abbbbc";
934aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c")));
935aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
936aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
937aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
938aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
939aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
940aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
941aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
942aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
943aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
944aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
945aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
946aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
947aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
948aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abbbbbc";
949aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"ab{3,5}c")));
950aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
951aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
952aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
953aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
954aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
955aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
956aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
957aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
958aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
959aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
960aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
961aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
962aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
963aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"adefc";
964aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c")));
965aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
966aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
967aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
968aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
969aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"abbbbbbc";
970aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"ab{3,5}c")));
971aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
972aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
973aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
974aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
975aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"adec";
976aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c")));
977aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
978aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
979aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
980aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
981aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"adefc";
982aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c")));
983aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
984aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
985aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
986aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
987aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
988aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
989aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
990aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
991aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
992aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
993aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
994aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
995aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
996aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"adefgc";
997aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c")));
998aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
999aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1000aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1001aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1002aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1003aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1004aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1005aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1006aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1007aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1008aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1009aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1010aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1011aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"adefghc";
1012aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"a.{3,5}c")));
1013aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1014aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1015aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1016aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1017aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1018aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1019aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1020aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1021aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1022aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1023aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1024aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1025aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1026aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"adefghic";
1027aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"a.{3,5}c")));
1028aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1029aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1030aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1031aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1032aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"tournament";
1033aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"tour|to|tournament")));
1034aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1035aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1036aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1037aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1038aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"tournamenttotour";
1039aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"(tour|to|tournament)+",
1040aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant               std::regex_constants::nosubs)));
1041aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1042aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1043aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1044aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1045aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"ttotour";
1046aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"(tour|to|t)+")));
1047aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 2);
1048aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1049aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1050aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1051aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1052aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1053aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1054aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1055aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1056aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1057aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(1) == 4);
1058aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(1) == 3);
1059aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(1) == L"tour");
1060aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1061aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1062aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1063aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"-ab,ab-";
1064aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"-(.*),\1-")));
1065aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1066aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1067aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1068aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1069aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"-ab,ab-";
1070aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"-.*,.*-")));
1071aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1072aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1073aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1074aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1075aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1076aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1077aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1078aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1079aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1080aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1081aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1082aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1083aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1084aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"a";
1085aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"^[a]$")));
1086aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1087aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1088aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1089aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1090aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1091aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1092aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1093aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
1094aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1095aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == L"a");
1096aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1097aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1098aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1099aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"a";
1100aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"^[ab]$")));
1101aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1102aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1103aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1104aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1105aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1106aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1107aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1108aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
1109aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1110aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == L"a");
1111aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1112aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1113aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1114aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"c";
1115aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"^[a-f]$")));
1116aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1117aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1118aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1119aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1120aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1121aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1122aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1123aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 1);
1124aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1125aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1126aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1127aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1128aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1129aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"g";
1130aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"^[a-f]$")));
1131aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1132aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1133aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1134aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1135aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"Iraqi";
1136aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"q[^u]")));
1137aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1138aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1139aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1140aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1141aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"Iraq";
1142aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"q[^u]")));
1143aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1144aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1145aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1146aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1147aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"AmB";
1148aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"A[[:lower:]]B")));
1149aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1150aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1151aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1152aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1153aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1154aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1155aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1156aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1157aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1158aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1159aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1160aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1161aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1162aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"AMB";
1163aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"A[[:lower:]]B")));
1164aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1165aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1166aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1167aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1168aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"AMB";
1169aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B")));
1170aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1171aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1172aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1173aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1174aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1175aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1176aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1177aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1178aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1179aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1180aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1181aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1182aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1183aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"AmB";
1184aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]]B")));
1185aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1186aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1187aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1188aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1189aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"A5B";
1190aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B")));
1191aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1192aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1193aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1194aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1195aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"A?B";
1196aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"A[^[:lower:]0-9]B")));
1197aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1198aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1199aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1200aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1201aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1202aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1203aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1204aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1205aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1206aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1207aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1208aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1209aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1210aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"-";
1211aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]")));
1212aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1213aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1214aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1215aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1216aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1217aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1218aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1219aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1220aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1221aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1222aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1223aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1224aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1225aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"z";
1226aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]")));
1227aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1228aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1229aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1230aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1231aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1232aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1233aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1234aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1235aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1236aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1237aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1238aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1239aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1240aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"m";
1241aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"[a[.hyphen.]z]")));
1242aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1243aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1244aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    std::locale::global(std::locale("cs_CZ.ISO8859-2"));
1245aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1246aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1247aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"m";
1248aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"[a[=M=]z]")));
1249aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1250aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1251aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1252aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1253aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1254aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1255aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1256aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1257aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1258aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1259aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1260aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1261aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1262aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"Ch";
1263aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"[a[.ch.]z]",
1264aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant                   std::regex_constants::icase)));
1265aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1266aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1267aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1268aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1269aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1270aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1271aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1272aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1273aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1274aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1275aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1276aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    std::locale::global(std::locale("C"));
1277aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1278aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1279aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"m";
1280aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"[a[=M=]z]")));
1281aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1282aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1283aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1284aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1285aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"01a45cef9";
1286aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]*")));
1287aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1288aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1289aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1290aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1291aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"01a45cef9";
1292aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"[ace1-9]+")));
1293aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1294aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1295aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1296aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";
1297aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);
1298aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        typedef forward_iterator<const wchar_t*> FI;
1299aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        typedef bidirectional_iterator<const wchar_t*> BI;
1300aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wregex regex(FI(r), FI(r+sr));
1301aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::match_results<BI> m;
1302aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"-40C";
1303aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);
1304aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(BI(s), BI(s+ss), m, regex));
1305aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1306aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1307aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == BI(s));
1308aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1309aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1310aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1311aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == m[0].second);
1312aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == 4);
1313aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1314aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1315aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1316aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1317aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1318aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"Jeff Jeffs ";
1319aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"Jeff(?=s\\b)")));
1320aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1321aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1322aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1323aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1324aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"Jeffs Jeff";
1325aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!std::regex_match(s, m, std::wregex(L"Jeff(?!s\\b)")));
1326aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 0);
1327aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1328aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    {
1329aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        std::wcmatch m;
1330aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        const wchar_t s[] = L"5%k";
1331aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(std::regex_match(s, m, std::wregex(L"\\d[\\W]k")));
1332aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.size() == 1);
1333aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.prefix().matched);
1334aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().first == s);
1335aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.prefix().second == m[0].first);
1336aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(!m.suffix().matched);
1337aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().first == m[0].second);
1338aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
1339aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
1340aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.position(0) == 0);
1341aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant        assert(m.str(0) == s);
1342aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant    }
1343aa78f9cdb3c8a049660deb39c9296501d2467d78Howard Hinnant}
1344