21 using IterType =
decltype(std::begin(std::declval<T&>()));
22 using DifferenceType = std::ptrdiff_t;
23 using ValueType = std::tuple<std::size_t, decltype(*std::begin(std::declval<T&>()))>;
25 using Reference = ValueType;
26 using IteratorCategory = std::input_iterator_tag;
28 iterator(IterType iter, std::size_t index)
41 bool operator!=(
const iterator& other)
const
43 return iter_ != other.iter_;
46 auto operator*()
const
48 return std::tie(index_, *iter_);