is_range

Description

Checks if the type provides begin and end iterators that can be used with a for-range loop.

Synopsis

TICK_TRAIT(is_range)
{
    using std::begin;
    using std::end;
    template<class T>
    auto require(T&& x) -> valid<
        decltype(returns<is_iterator<_>>(begin(std::forward<T>(x)))),
        decltype(returns<is_iterator<_>>(end(std::forward<T>(x))))
    >;
};