18    explicit Range(NumT t_end) : m_begin(0), m_end(t_end) {}
 
   19    Range(NumT t_begin, NumT t_end) : m_begin(t_begin), m_end(t_end) {}
 
   22        friend class Range<NumT>;
 
   24        explicit iterator(NumT t_index) : m_index(t_index) {}
 
   26        bool operator!=(
const iterator& t_it)
 const { 
return t_it.m_index != m_index; }
 
   27        bool operator==(
const iterator& t_it)
 const { 
return t_it.m_index == m_index; }
 
   28        iterator& operator++() { ++m_index; 
return *
this; }
 
   29        iterator operator++(
int) & { 
auto result = *
this; ++m_index; 
return *
this; }
 
   30        NumT operator*()
 const { 
return m_index; }
 
   31        NumT* operator->()
 const { 
return &m_index; }
 
 
   35    [[nodiscard]] iterator end()
 const { 
return iterator(m_end); }