Annex D (normative) Compatibility features [depr]

D.13 Deprecated iterator primitives [depr.iterator.primitives]

D.13.1 Basic iterator [depr.iterator.basic]

В шапке есть следующее дополнение:<iterator>

namespace std {
  template<class Category, class T, class Distance = ptrdiff_t,
    class Pointer = T*, class Reference = T&>
  struct iterator {
    using iterator_category = Category;
    using value_type        = T;
    using difference_type   = Distance;
    using pointer           = Pointer;
    using reference         = Reference;
  };
}

iterator Шаблон может быть использован в качестве базового класса , чтобы облегчить определение необходимых типов для новых итераторов.

[ Note: Если новый тип итератора является шаблоном класса, то эти псевдонимы не будут видны из определения шаблона класса итератора, а будут видны только вызывающим объектам этого класса. ]end note

[ Example: Если программа на C ++ хочет определить двунаправленный итератор для некоторой структуры данных, содержащей double и такой, чтобы она работала на большой модели памяти реализации, она может сделать это с помощью:

class MyIterator :
  public iterator<bidirectional_iterator_tag, double, long, T*, T&> {
  // code implementing ++, etc.
};

end example]