28 using iterator_category = std::random_access_iterator_tag;
29 using reference = std::result_of_t<Fn(std::size_t)>;
30 using value_type = std::remove_cv_t<std::remove_reference_t<reference>>;
31 using difference_type = detail::ptrdiff_t;
32 using pointer = std::add_pointer_t<value_type>;
46 reference operator*()
const {
return fn_(iter_); }
47 reference operator[](std::size_t i)
const {
48 auto iter = *
this + i;
52 auto operator-(IndexTransformIter
const &that)
const {
return iter_ - that.iter_; }
53 bool operator==(IndexTransformIter
const &that)
const {
return iter_ == that.iter_; }
54 bool operator!=(IndexTransformIter
const &that)
const {
return !(*
this == that); }