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