33 class Iterator final {
34 using Base = std::conditional_t<Const,
const Value, Value>;
35 using RawIterator =
decltype(std::declval<Base&>().begin());
38 using iterator_category = std::forward_iterator_tag;
39 using difference_type = std::ptrdiff_t;
40 using value_type = ItemsWrapperValue<Base>;
41 using reference = value_type;
47 explicit Iterator(RawIterator it)
52 Iterator(
const Iterator& other) =
default;
53 Iterator(Iterator&& other)
noexcept =
default;
55 Iterator& operator=(
const Iterator& other) =
default;
56 Iterator& operator=(Iterator&& other)
noexcept =
default;
58 reference operator*()
const {
return {it_.GetName(), *it_}; }
60 Iterator operator++(
int) {
66 Iterator& operator++() {
71 bool operator==(
const Iterator& other)
const {
return it_ == other.it_; }