33 using value_type =
typename std::iterator_traits<IteratorT>::value_type;
37 : begin_iterator_(
std::move(begin_iterator)),
38 end_iterator_(
std::move(end_iterator)) {}
40 IteratorT
begin()
const {
return begin_iterator_; }
41 IteratorT
end()
const {
return end_iterator_; }
49 template <
class It = IteratorT>
50 typename std::enable_if<std::is_base_of<std::random_access_iterator_tag,
51 typename std::iterator_traits<
55 return std::distance(begin_iterator_, end_iterator_);
59 bool empty()
const {
return begin_iterator_ == end_iterator_; }
62 IteratorT begin_iterator_, end_iterator_;