17670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//===----------------------------------------------------------------------===//
27670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//
37670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//                     The LLVM Compiler Infrastructure
47670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//
57670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
67670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
77670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//
87670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//===----------------------------------------------------------------------===//
97670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
107670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant// <regex>
117670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
127670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant// template <class BidirectionalIterator, class Allocator, class charT, class traits>
137670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//     bool
147670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//     regex_search(BidirectionalIterator first, BidirectionalIterator last,
157670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//                  match_results<BidirectionalIterator, Allocator>& m,
167670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//                  const basic_regex<charT, traits>& e,
177670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant//                  regex_constants::match_flag_type flags = regex_constants::match_default);
187670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
197670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant#include <regex>
207670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant#include <cassert>
217670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
227670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnantint main()
237670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant{
247670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    // Iterating over /^a/ should yield one instance at the beginning
257670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    // of the text.
267670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
277670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    const char *text = "aaa\naa";
287670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    std::regex re{"^a"};
297670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    std::cregex_iterator it{text, text+6, re};
307670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    std::cregex_iterator end{};
317670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
327670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    assert(it->str() == "a");
337670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    assert(it->position(0) == 0);
347670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    assert(it->length(0) == 1);
357670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant
367670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    ++it;
377670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant    assert(it == end);
387670f7d1ed9f2e6c2012c62bea38acb85f6adc40Howard Hinnant}
39