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