115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//===----------------------------------------------------------------------===//
215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//
315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//                     The LLVM Compiler Infrastructure
415476f345d78e8d9e533bd45a685c4b4480e6908Howard 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.
715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//
815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//===----------------------------------------------------------------------===//
915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant
1015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant// <regex>
1115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant
1215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant// template <class BidirectionalIterator, class Allocator, class charT, class traits>
1315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//     bool
1415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//     regex_search(BidirectionalIterator first, BidirectionalIterator last,
1515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//                  match_results<BidirectionalIterator, Allocator>& m,
1615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//                  const basic_regex<charT, traits>& e,
1715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant//                  regex_constants::match_flag_type flags = regex_constants::match_default);
1815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant
1915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant#include <regex>
2015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant#include <cassert>
2115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant
2283e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h"
2315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant
2415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnantint main()
2515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant{
2615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
2715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
2815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "a";
2915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a", std::regex_constants::awk)));
3015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
3115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.empty());
3215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
3315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
3415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
3515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
3615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
3715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+1);
3815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
3915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
4015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "a");
4115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
4215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
4315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
4415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "ab";
4515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::awk)));
4615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
4715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
4815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
4915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
5015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
5115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
5215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+2);
5315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
5415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
5515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "ab");
5615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
5715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
5815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
5915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "ab";
6015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("ba", std::regex_constants::awk)));
6115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
6215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.empty());
6315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
6415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
6515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
6615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "aab";
6715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("ab", std::regex_constants::awk)));
6815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
6915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
7015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
7115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
7215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
7315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
7415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
7515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
7615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 1);
7715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "ab");
7815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
7915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
8015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
8115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "aab";
8215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("ab", std::regex_constants::awk),
8315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                            std::regex_constants::match_continuous));
8415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
8515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
8615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
8715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
8815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abcd";
8915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("bc", std::regex_constants::awk)));
9015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
9115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
9215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
9315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
9415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
9515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
9615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+4);
9715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
9815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 1);
9915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "bc");
10015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
10115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
10215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
10315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abbc";
10415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("ab*c", std::regex_constants::awk)));
10515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
10615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
10715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
10815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
10915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
11015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
11115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+4);
11215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 4);
11315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
11415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
11515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
11615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
11715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
11815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "ababc";
11915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("(ab)*c", std::regex_constants::awk)));
12015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
12115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
12215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
12315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
12415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
12515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
12615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+5);
12715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 5);
12815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
12915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
13015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 2);
13115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 2);
13215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == "ab");
13315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
13415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
13515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
13615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abcdefghijk";
13715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi",
13815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                 std::regex_constants::awk)));
13915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 3);
14015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
14115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
14215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
14315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
14415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
14515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+std::regex_traits<char>::length(s));
14615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 7);
14715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 2);
14815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "cdefghi");
14915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 3);
15015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 4);
15115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == "efg");
15215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(2) == 1);
15315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(2) == 4);
15415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(2) == "e");
15515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
15615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
15715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
15815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abc";
15915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("^abc", std::regex_constants::awk)));
16015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
16115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
16215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
16315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
16415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
16515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
16615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
16715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
16815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
16915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
17015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
17115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
17215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
17315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abcd";
17415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("^abc", std::regex_constants::awk)));
17515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
17615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
17715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
17815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
17915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
18015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
18115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+4);
18215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
18315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
18415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "abc");
18515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
18615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
18715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
18815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "aabc";
18915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("^abc", std::regex_constants::awk)));
19015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
19115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
19215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
19315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
19415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abc";
19515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("abc$", std::regex_constants::awk)));
19615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
19715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
19815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
19915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
20015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
20115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
20215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
20315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
20415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
20515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
20615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
20715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
20815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
20915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "efabc";
21015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("abc$", std::regex_constants::awk)));
21115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
21215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
21315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
21415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
21515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
21615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
21715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+5);
21815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
21915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 2);
22015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s+2);
22115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
22215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
22315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
22415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "efabcg";
22515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("abc$", std::regex_constants::awk)));
22615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
22715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
22815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
22915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
23015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abc";
23115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::awk)));
23215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
23315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
23415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
23515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
23615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
23715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
23815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
23915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
24015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
24115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
24215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
24315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
24415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
24515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "acc";
24615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::awk)));
24715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
24815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
24915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
25015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
25115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
25215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
25315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
25415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
25515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
25615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
25715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
25815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
25915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
26015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "acc";
26115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a.c", std::regex_constants::awk)));
26215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
26315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
26415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
26515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
26615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
26715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
26815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
26915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
27015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
27115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
27215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
27315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
27415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
27515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abcdef";
27615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("(.*).*", std::regex_constants::awk)));
27715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
27815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
27915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
28015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
28115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
28215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
28315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+6);
28415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 6);
28515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
28615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
28715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 6);
28815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 0);
28915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == s);
29015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
29115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
29215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
29315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "bc";
29415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("(a*)*", std::regex_constants::awk)));
29515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
29615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
29715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
29815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
29915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
30015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
30115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+2);
30215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 0);
30315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
30415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "");
30515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 0);
30615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 0);
30715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == "");
30815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
30915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
31015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
31115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abbc";
31215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
31315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
31415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
31515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
31615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
31715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abbbc";
31815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
31915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
32015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
32115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
32215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
32315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
32415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
32515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
32615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
32715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
32815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
32915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
33015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
33115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
33215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abbbbc";
33315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
33415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
33515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
33615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
33715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
33815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
33915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
34015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
34115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
34215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
34315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
34415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
34515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
34615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
34715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abbbbbc";
34815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
34915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
35015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
35115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
35215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
35315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
35415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
35515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
35615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
35715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
35815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
35915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
36015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
36115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
36215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "adefc";
36315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
36415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
36515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
36615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
36715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
36815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "abbbbbbc";
36915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("ab{3,5}c", std::regex_constants::awk)));
37015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
37115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
37215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
37315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
37415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "adec";
37515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
37615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
37715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
37815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
37915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
38015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "adefc";
38115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
38215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
38315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
38415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
38515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
38615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
38715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
38815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
38915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
39015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
39115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
39215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
39315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
39415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
39515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "adefgc";
39615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
39715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
39815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
39915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
40015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
40115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
40215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
40315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
40415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
40515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
40615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
40715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
40815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
40915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
41015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "adefghc";
41115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
41215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
41315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
41415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
41515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
41615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
41715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
41815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
41915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
42015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
42115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
42215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
42315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
42415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
42515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "adefghic";
42615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("a.{3,5}c", std::regex_constants::awk)));
42715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
42815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
42915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
43015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
43115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "tournament";
43215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("tour|to|tournament",
43315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                              std::regex_constants::awk)));
43415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
43515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
43615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
43715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
43815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
43915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
44015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
44115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
44215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
44315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
44415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
44515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
44615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
44715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "tournamenttotour";
44815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("(tour|to|tournament)+",
44915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant               std::regex_constants::awk | std::regex_constants::nosubs)));
45015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
45115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
45215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
45315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
45415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
45515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
45615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
45715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
45815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
45915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
46015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
46115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
46215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
46315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "ttotour";
46415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("(tour|to|t)+",
46515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                              std::regex_constants::awk)));
46615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
46715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
46815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
46915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
47015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
47115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
47215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
47315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
47415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
47515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
47615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 4);
47715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 3);
47815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == "tour");
47915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
48015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
48115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
48215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "-ab,ab-";
48315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("-(.*),\1-", std::regex_constants::awk)));
48415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
48515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
48615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
48715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
48815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "-ab,ab-";
48915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("-.*,.*-", std::regex_constants::awk)));
49015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
49115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
49215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
49315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
49415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
49515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
49615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
49715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
49815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
49915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
50015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
50115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
50215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
50315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "a";
50415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("^[a]$",
50515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
50615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
50715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
50815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
50915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
51015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
51115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
51215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
51315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
51415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
51515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "a");
51615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
51715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
51815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
51915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "a";
52015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("^[ab]$",
52115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
52215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
52315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
52415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
52515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
52615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
52715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
52815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
52915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
53015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
53115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "a");
53215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
53315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
53415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
53515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "c";
53615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("^[a-f]$",
53715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
53815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
53915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
54015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
54115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
54215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
54315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
54415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
54515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
54615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
54715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
54815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
54915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
55015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
55115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "g";
55215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("^[a-f]$",
55315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
55415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
55515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
55615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
55715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
55815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "Iraqi";
55915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("q[^u]",
56015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
56115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
56215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
56315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
56415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
56515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
56615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
56715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
56815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
56915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 3);
57015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "qi");
57115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
57215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
57315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
57415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "Iraq";
57515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("q[^u]",
57615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
57715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
57815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
57915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
58015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
58115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "AmB";
58215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("A[[:lower:]]B",
58315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
58415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
58515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
58615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
58715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
58815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
58915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
59015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
59115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
59215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
59315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
59415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
59515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
59615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
59715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "AMB";
59815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("A[[:lower:]]B",
59915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
60015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
60115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
60215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
60315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
60415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "AMB";
60515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("A[^[:lower:]]B",
60615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
60715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
60815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
60915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
61015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
61115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
61215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
61315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
61415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
61515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
61615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
61715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
61815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
61915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
62015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "AmB";
62115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("A[^[:lower:]]B",
62215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
62315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
62415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
62515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
62615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
62715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "A5B";
62815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("A[^[:lower:]0-9]B",
62915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
63015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
63115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
63215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
63315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
63415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "A?B";
63515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("A[^[:lower:]0-9]B",
63615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
63715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
63815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
63915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
64015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
64115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
64215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
64315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
64415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
64515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
64615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
64715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
64815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
64915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
65015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "-";
65115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]",
65215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
65315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
65415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
65515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
65615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
65715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
65815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
65915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
66015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
66115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
66215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
66315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
66415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
66515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
66615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "z";
66715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[a[.hyphen.]z]",
66815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
66915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
67015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
67115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
67215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
67315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
67415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
67515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
67615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
67715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
67815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
67915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
68015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
68115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
68215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "m";
68315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("[a[.hyphen.]z]",
68415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
68515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
68615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
68715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    std::locale::global(std::locale("cs_CZ.ISO8859-2"));
68815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
68915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
69015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "m";
69115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[a[=M=]z]",
69215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
69315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
69415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
69515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
69615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
69715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
69815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
69915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
70015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
70115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
70215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
70315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
70415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
70515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
70615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "Ch";
70715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[a[.ch.]z]",
70815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                   std::regex_constants::awk | std::regex_constants::icase)));
70915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
71015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
71115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
71215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
71315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
71415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
71515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
71615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
71715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
71815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
71915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
72015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    std::locale::global(std::locale("C"));
72115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
72215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
72315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "m";
72415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::regex("[a[=M=]z]",
72515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
72615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
72715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
72815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
72915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
73015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "01a45cef9";
73115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[ace1-9]*",
73215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
73315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
73415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
73515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
73615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
73715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
73815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
73915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s + std::char_traits<char>::length(s));
74015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 0);
74115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
74215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "");
74315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
74415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
74515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
74615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "01a45cef9";
74715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[ace1-9]+",
74815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
74915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
75015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
75115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
75215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
75315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
75415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
75515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s + std::char_traits<char>::length(s));
75615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 6);
75715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 1);
75815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == "1a45ce");
75915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
76015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
76115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char r[] = "^[-+]?[0-9]+[CF]$";
76215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::ptrdiff_t sr = std::char_traits<char>::length(r);
76315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        typedef forward_iterator<const char*> FI;
76415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        typedef bidirectional_iterator<const char*> BI;
76515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::regex regex(FI(r), FI(r+sr), std::regex_constants::awk);
76615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::match_results<BI> m;
76715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "-40C";
76815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::ptrdiff_t ss = std::char_traits<char>::length(s);
76915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(BI(s), BI(s+ss), m, regex));
77015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
77115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
77215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == BI(s));
77315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
77415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
77515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
77615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
77715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 4);
77815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
77915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
78015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
78115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
78215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::cmatch m;
78315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const char s[] = "\n\n\n";
78415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::regex("[\\n]+",
78515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
78615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
78715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
78815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
78915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
79015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
79115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
79215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s + std::char_traits<char>::length(s));
79315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<char>::length(s));
79415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
79515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
79615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
79715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
79815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
79915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"a";
80015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a", std::regex_constants::awk)));
80115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
80215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.empty());
80315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
80415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
80515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
80615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
80715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
80815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+1);
80915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
81015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
81115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"a");
81215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
81315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
81415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
81515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"ab";
81615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk)));
81715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
81815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
81915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
82015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
82115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
82215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
82315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+2);
82415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
82515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
82615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"ab");
82715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
82815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
82915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
83015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"ab";
83115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"ba", std::regex_constants::awk)));
83215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
83315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.empty());
83415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
83515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
83615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
83715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"aab";
83815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk)));
83915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
84015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
84115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
84215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
84315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
84415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
84515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
84615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
84715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 1);
84815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"ab");
84915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
85015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
85115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
85215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"aab";
85315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"ab", std::regex_constants::awk),
85415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                            std::regex_constants::match_continuous));
85515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
85615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
85715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
85815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
85915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abcd";
86015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"bc", std::regex_constants::awk)));
86115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
86215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
86315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
86415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
86515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
86615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
86715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+4);
86815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
86915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 1);
87015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"bc");
87115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
87215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
87315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
87415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abbc";
87515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"ab*c", std::regex_constants::awk)));
87615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
87715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
87815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
87915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
88015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
88115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
88215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+4);
88315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 4);
88415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
88515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
88615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
88715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
88815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
88915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"ababc";
89015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"(ab)*c", std::regex_constants::awk)));
89115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
89215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
89315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
89415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
89515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
89615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
89715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+5);
89815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 5);
89915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
90015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
90115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 2);
90215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 2);
90315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == L"ab");
90415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
90515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
90615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
90715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abcdefghijk";
90815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi",
90915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                 std::regex_constants::awk)));
91015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 3);
91115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
91215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
91315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
91415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
91515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
91615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+std::regex_traits<wchar_t>::length(s));
91715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 7);
91815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 2);
91915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"cdefghi");
92015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 3);
92115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 4);
92215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == L"efg");
92315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(2) == 1);
92415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(2) == 4);
92515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(2) == L"e");
92615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
92715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
92815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
92915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abc";
93015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
93115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
93215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
93315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
93415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
93515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
93615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
93715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
93815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
93915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
94015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
94115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
94215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
94315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
94415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abcd";
94515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
94615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
94715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
94815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
94915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
95015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
95115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
95215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+4);
95315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
95415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
95515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"abc");
95615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
95715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
95815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
95915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"aabc";
96015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"^abc", std::regex_constants::awk)));
96115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
96215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
96315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
96415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
96515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abc";
96615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
96715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
96815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
96915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
97015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
97115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
97215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
97315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
97415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
97515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
97615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
97715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
97815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
97915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
98015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"efabc";
98115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
98215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
98315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
98415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
98515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
98615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
98715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
98815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+5);
98915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
99015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 2);
99115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s+2);
99215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
99315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
99415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
99515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"efabcg";
99615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"abc$", std::regex_constants::awk)));
99715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
99815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
99915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
100015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
100115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abc";
100215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
100315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
100415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
100515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
100615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
100715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
100815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
100915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
101015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
101115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
101215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
101315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
101415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
101515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
101615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"acc";
101715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
101815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
101915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
102015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
102115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
102215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
102315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
102415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
102515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
102615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
102715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
102815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
102915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
103015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
103115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"acc";
103215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a.c", std::regex_constants::awk)));
103315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
103415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
103515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
103615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
103715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
103815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
103915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+3);
104015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 3);
104115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
104215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
104315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
104415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
104515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
104615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abcdef";
104715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"(.*).*", std::regex_constants::awk)));
104815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
104915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
105015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
105115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
105215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
105315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
105415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+6);
105515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 6);
105615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
105715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
105815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 6);
105915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 0);
106015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == s);
106115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
106215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
106315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
106415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"bc";
106515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"(a*)*", std::regex_constants::awk)));
106615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
106715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
106815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
106915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
107015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
107115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
107215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s+2);
107315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 0);
107415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
107515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"");
107615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 0);
107715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 0);
107815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == L"");
107915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
108015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
108115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
108215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abbc";
108315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
108415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
108515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
108615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
108715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
108815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abbbc";
108915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
109015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
109115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
109215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
109315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
109415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
109515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
109615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
109715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
109815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
109915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
110015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
110115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
110215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
110315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abbbbc";
110415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
110515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
110615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
110715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
110815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
110915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
111015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
111115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
111215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
111315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
111415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
111515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
111615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
111715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
111815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abbbbbc";
111915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
112015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
112115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
112215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
112315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
112415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
112515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
112615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
112715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
112815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
112915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
113015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
113115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
113215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
113315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"adefc";
113415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
113515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
113615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
113715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
113815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
113915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"abbbbbbc";
114015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"ab{3,5}c", std::regex_constants::awk)));
114115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
114215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
114315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
114415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
114515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"adec";
114615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
114715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
114815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
114915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
115015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
115115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"adefc";
115215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
115315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
115415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
115515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
115615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
115715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
115815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
115915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
116015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
116115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
116215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
116315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
116415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
116515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
116615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"adefgc";
116715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
116815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
116915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
117015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
117115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
117215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
117315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
117415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
117515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
117615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
117715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
117815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
117915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
118015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
118115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"adefghc";
118215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
118315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
118415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
118515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
118615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
118715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
118815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
118915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
119015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
119115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
119215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
119315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
119415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
119515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
119615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"adefghic";
119715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"a.{3,5}c", std::regex_constants::awk)));
119815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
119915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
120015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
120115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
120215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"tournament";
120315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"tour|to|tournament",
120415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                              std::regex_constants::awk)));
120515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
120615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
120715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
120815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
120915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
121015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
121115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
121215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
121315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
121415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
121515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
121615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
121715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
121815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"tournamenttotour";
121915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"(tour|to|tournament)+",
122015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant               std::regex_constants::awk | std::regex_constants::nosubs)));
122115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
122215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
122315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
122415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
122515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
122615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
122715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
122815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
122915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
123015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
123115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
123215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
123315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
123415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"ttotour";
123515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"(tour|to|t)+",
123615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                              std::regex_constants::awk)));
123715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 2);
123815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
123915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
124015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
124115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
124215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
124315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
124415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
124515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
124615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
124715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(1) == 4);
124815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(1) == 3);
124915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(1) == L"tour");
125015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
125115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
125215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
125315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"-ab,ab-";
125415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"-(.*),\1-", std::regex_constants::awk)));
125515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
125615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
125715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
125815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
125915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"-ab,ab-";
126015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"-.*,.*-", std::regex_constants::awk)));
126115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
126215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
126315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
126415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
126515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
126615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
126715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
126815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
126915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
127015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
127115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
127215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
127315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
127415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"a";
127515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"^[a]$",
127615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
127715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
127815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
127915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
128015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
128115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
128215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
128315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
128415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
128515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
128615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"a");
128715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
128815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
128915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
129015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"a";
129115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"^[ab]$",
129215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
129315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
129415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
129515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
129615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
129715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
129815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
129915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
130015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
130115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
130215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"a");
130315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
130415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
130515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
130615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"c";
130715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"^[a-f]$",
130815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
130915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
131015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
131115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
131215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
131315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
131415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
131515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
131615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 1);
131715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
131815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
131915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
132015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
132115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
132215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"g";
132315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"^[a-f]$",
132415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
132515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
132615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
132715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
132815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
132915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"Iraqi";
133015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"q[^u]",
133115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
133215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
133315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
133415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
133515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
133615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
133715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
133815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
133915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 2);
134015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 3);
134115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"qi");
134215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
134315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
134415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
134515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"Iraq";
134615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"q[^u]",
134715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
134815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
134915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
135015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
135115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
135215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"AmB";
135315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"A[[:lower:]]B",
135415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
135515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
135615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
135715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
135815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
135915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
136015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
136115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
136215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
136315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
136415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
136515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
136615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
136715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
136815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"AMB";
136915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"A[[:lower:]]B",
137015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
137115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
137215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
137315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
137415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
137515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"AMB";
137615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B",
137715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
137815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
137915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
138015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
138115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
138215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
138315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
138415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
138515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
138615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
138715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
138815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
138915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
139015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
139115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"AmB";
139215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]]B",
139315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
139415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
139515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
139615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
139715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
139815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"A5B";
139915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B",
140015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
140115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
140215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
140315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
140415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
140515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"A?B";
140615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"A[^[:lower:]0-9]B",
140715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
140815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
140915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
141015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
141115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
141215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
141315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
141415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
141515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
141615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
141715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
141815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
141915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
142015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
142115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"-";
142215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",
142315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
142415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
142515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
142615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
142715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
142815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
142915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
143015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
143115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
143215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
143315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
143415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
143515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
143615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
143715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"z";
143815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",
143915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
144015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
144115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
144215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
144315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
144415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
144515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
144615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
144715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
144815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
144915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
145015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
145115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
145215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
145315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"m";
145415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"[a[.hyphen.]z]",
145515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
145615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
145715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
145815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    std::locale::global(std::locale("cs_CZ.ISO8859-2"));
145915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
146015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
146115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"m";
146215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
146315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
146415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
146515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
146615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
146715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
146815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
146915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
147015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
147115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
147215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
147315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
147415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
147515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
147615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
147715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"Ch";
147815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[a[.ch.]z]",
147915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                   std::regex_constants::awk | std::regex_constants::icase)));
148015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
148115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
148215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
148315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
148415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
148515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
148615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
148715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
148815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
148915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
149015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
149115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    std::locale::global(std::locale("C"));
149215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
149315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
149415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"m";
149515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!std::regex_search(s, m, std::wregex(L"[a[=M=]z]",
149615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
149715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 0);
149815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
149915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
150015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
150115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"01a45cef9";
150215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[ace1-9]*",
150315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
150415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
150515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
150615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
150715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
150815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
150915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
151015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
151115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 0);
151215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
151315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"");
151415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
151515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
151615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
151715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"01a45cef9";
151815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[ace1-9]+",
151915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
152015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
152115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().matched);
152215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
152315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
152415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().matched);
152515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
152615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
152715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 6);
152815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 1);
152915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == L"1a45ce");
153015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
153115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
153215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t r[] = L"^[-+]?[0-9]+[CF]$";
153315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::ptrdiff_t sr = std::char_traits<wchar_t>::length(r);
153415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        typedef forward_iterator<const wchar_t*> FI;
153515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        typedef bidirectional_iterator<const wchar_t*> BI;
153615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wregex regex(FI(r), FI(r+sr), std::regex_constants::awk);
153715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::match_results<BI> m;
153815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"-40C";
153915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::ptrdiff_t ss = std::char_traits<wchar_t>::length(s);
154015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(BI(s), BI(s+ss), m, regex));
154115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
154215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
154315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == BI(s));
154415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
154515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
154615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
154715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == m[0].second);
154815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == 4);
154915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
155015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
155115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
155215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    {
155315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        std::wcmatch m;
155415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        const wchar_t s[] = L"\n\n\n";
155515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(std::regex_search(s, m, std::wregex(L"[\\n]+",
155615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant                                                 std::regex_constants::awk)));
155715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.size() == 1);
155815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.prefix().matched);
155915476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().first == s);
156015476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.prefix().second == m[0].first);
156115476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(!m.suffix().matched);
156215476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().first == m[0].second);
156315476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
156415476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.length(0) == std::char_traits<wchar_t>::length(s));
156515476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.position(0) == 0);
156615476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant        assert(m.str(0) == s);
156715476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant    }
156815476f345d78e8d9e533bd45a685c4b4480e6908Howard Hinnant}
1569