//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // <regex> // template <class BidirectionalIterator, class Allocator, class charT, class traits> // bool // regex_search(BidirectionalIterator first, BidirectionalIterator last, // match_results<BidirectionalIterator, Allocator>& m, // const basic_regex<charT, traits>& e, // regex_constants::match_flag_type flags = regex_constants::match_default); #include <regex> #include <string> #include <list> #include <cassert> int main() { // This regex_iterator uses regex_search(__wrap_iter<_Iter> __first, ...) // Test for http://llvm.org/bugs/show_bug.cgi?id=16240 fixed in r185273. { std::string s{"aaaa a"}; std::regex re{"\\ba"}; std::sregex_iterator it{s.begin(), s.end(), re}; std::sregex_iterator end{}; assert(it->position(0) == 0); assert(it->length(0) == 1); ++it; assert(it->position(0) == 5); assert(it->length(0) == 1); ++it; assert(it == end); } // This regex_iterator uses regex_search(_BidirectionalIterator __first, ...) { std::string s{"aaaa a"}; std::list<char> l{s.begin(), s.end()}; std::regex re{"\\ba"}; std::regex_iterator<std::list<char>::iterator> it{l.begin(), l.end(), re}; std::regex_iterator<std::list<char>::iterator> end{}; assert(it->position(0) == 0); assert(it->length(0) == 1); ++it; assert(it->position(0) == 5); assert(it->length(0) == 1); ++it; assert(it == end); } }