19 #ifndef WPIUTIL_WPI_ITERATOR_RANGE_H
20 #define WPIUTIL_WPI_ITERATOR_RANGE_H
31 template <
typename IteratorT>
33 IteratorT begin_iterator, end_iterator;
38 template <
typename Container>
41 : begin_iterator(c.begin()), end_iterator(c.end()) {}
43 : begin_iterator(std::move(begin_iterator)),
44 end_iterator(std::move(end_iterator)) {}
46 IteratorT begin()
const {
return begin_iterator; }
47 IteratorT end()
const {
return end_iterator; }
58 template <
typename T> iterator_range<T>
make_range(std::pair<T, T> p) {
59 return iterator_range<T>(std::move(p.first), std::move(p.second));
63 iterator_range<decltype(adl_begin(std::declval<T>()))> drop_begin(T &&t,
65 return make_range(std::next(adl_begin(t), n), adl_end(t));