цикл на основе диапазона C ++ 11 для диапазона (L, R)

C ++ 11 не имеетt-петля на основе диапазона для ранжированной интегральной последовательности.

for(auto e : {0..10} )  // wouldn't compile!!!

Поэтому я просто решил смоделировать это.

template< class T , bool enable = std::is_integral::value >
struct range_impl
{
    struct iterator
    {
        constexpr T operator * ()const noexcept { return value; }
        iterator& operator ++()noexcept { ++value; return *this; }

        friend
        constexpr bool operator != (const iterator & lhs, const iterator rhs ) noexcept
        {
            return lhs.value != rhs.value;
        }
        T value;
    };

    constexpr iterator begin()const noexcept { return { first }; }
    constexpr iterator end  ()const noexcept { return { last  }; } 

    T first;
    T last ;
}; 




template< class T >
range_impl  range(T first , T last) noexcept
{
    return {first, last};
}

int main(){
     // print numbers in [ 0..10 ), i.e. 0 1 2 3 4 5 6 7 8 9
     for(auto e : range(0,10) ) std::cout < e <  ' ';
     std::cout < std::endl;
}

Ответы на вопрос(2)

Ваш ответ на вопрос