20 using iterator_category = std::forward_iterator_tag;
21 using difference_type = std::ptrdiff_t;
22 using value_type =
typename Traits::ValueType;
23 using reference =
typename Traits::Reference;
24 using pointer =
typename Traits::Pointer;
26 using ContainerType =
typename Traits::ContainerType;
30 Iterator(ContainerType container,
int pos);
32 Iterator(
const Iterator& other);
33 Iterator(Iterator&& other)
noexcept;
34 Iterator& operator=(
const Iterator& other);
35 Iterator& operator=(Iterator&& other)
noexcept;
39 Iterator operator++(
int);
40 Iterator& operator++();
41 reference operator*()
const;
42 pointer operator->()
const;
44 bool operator==(
const Iterator& other)
const;
45 bool operator!=(
const Iterator& other)
const;
49 template <
typename T =
void>
53 "Reverse iterator should be used only on arrays or null, "
54 "they do not have GetName()"
65 std::string GetNameImpl()
const;
66 Iterator(ContainerType&& container,
int type,
int pos)
noexcept;
68 void UpdateValue()
const;
71 ContainerType container_;
77 mutable std::optional<value_type> current_;