1cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//===----------------------------------------------------------------------===//
2cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//
3cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//                     The LLVM Compiler Infrastructure
4cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard 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.
7cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//
8cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//===----------------------------------------------------------------------===//
9cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant
10cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// <regex>
11cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant
12cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// template <class BidirectionalIterator> class sub_match;
13cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant
14cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// template <class charT, class ST, class BiIter>
15cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//     basic_ostream<charT, ST>&
16cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant//     operator<<(basic_ostream<charT, ST>& os, const sub_match<BiIter>& m);
17cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant
18cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant#include <regex>
19cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant#include <sstream>
20cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant#include <cassert>
21ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_macros.h"
22cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant
23cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnanttemplate <class CharT>
24cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnantvoid
25cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnanttest(const std::basic_string<CharT>& s)
26cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant{
27cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    typedef std::basic_string<CharT> string;
28cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    typedef std::sub_match<typename string::const_iterator> SM;
29cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    typedef std::basic_ostringstream<CharT> ostringstream;
30cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    SM sm;
31cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    sm.first = s.begin();
32cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    sm.second = s.end();
33cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    sm.matched = true;
34cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    ostringstream os;
35cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    os << sm;
36cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    assert(os.str() == s);
37cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant}
38cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant
39cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnantint main()
40cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant{
41cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    test(std::string("123"));
42cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant    test(std::wstring(L"123"));
43cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant}
44