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> 13cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// class sub_match 14cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// : public pair<BidirectionalIterator, BidirectionalIterator> 15cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// { 16cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// public: 17cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// typedef BidirectionalIterator iterator; 18cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// typedef typename iterator_traits<iterator>::value_type value_type; 19cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// typedef typename iterator_traits<iterator>::difference_type difference_type; 20cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// typedef basic_string<value_type> string_type; 21bbd8086ee3448f38026219777112e787fde8504dHoward Hinnant// 22cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// bool matched; 23cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// ... 24cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant// }; 25cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant 26cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant#include <regex> 27cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant#include <type_traits> 28cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant#include <cassert> 29cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant 30cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnantint main() 31cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant{ 32cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant { 33cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant typedef std::sub_match<char*> SM; 34cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::iterator, char*>::value), ""); 35cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::value_type, char>::value), ""); 36cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::difference_type, std::ptrdiff_t>::value), ""); 37cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::string_type, std::string>::value), ""); 38cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_convertible<SM*, std::pair<char*, char*>*>::value), ""); 39cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant 40cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant SM sm; 41cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant sm.first = nullptr; 42cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant sm.second = nullptr; 43cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant sm.matched = false; 44cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant } 45cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant { 46cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant typedef std::sub_match<wchar_t*> SM; 47cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::iterator, wchar_t*>::value), ""); 48cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::value_type, wchar_t>::value), ""); 49cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::difference_type, std::ptrdiff_t>::value), ""); 50cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<SM::string_type, std::wstring>::value), ""); 51cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_convertible<SM*, std::pair<wchar_t*, wchar_t*>*>::value), ""); 52cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant 53cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant SM sm; 54cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant sm.first = nullptr; 55cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant sm.second = nullptr; 56cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant sm.matched = false; 57cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant } 58cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant { 59cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<std::csub_match, std::sub_match<const char*> >::value), ""); 60cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<std::wcsub_match, std::sub_match<const wchar_t*> >::value), ""); 61cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<std::ssub_match, std::sub_match<std::string::const_iterator> >::value), ""); 62cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant static_assert((std::is_same<std::wssub_match, std::sub_match<std::wstring::const_iterator> >::value), ""); 63cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant } 64cd85b9ee137e179cf38d935fc500e12521ccd3d2Howard Hinnant} 65