is_random_access_iterator¶
Header¶
#include <tick/traits/is_random_access_iterator.h>
Description¶
A random access iterator is a bidirectional iterator that can be moved to point to any element in constant time.
Requirements¶
The type It satisfies is_random_access_iterator if
- The type
Itsatisfies is_bidirectional_iterator - The type
Itsatisfies is_totally_ordered
And, given
value_type, the type denoted bystd::iterator_traits<It>::value_typedifference_type, the type denoted bystd::iterator_traits<It>::difference_typereference, the type denoted bystd::iterator_traits<It>::referencei,a,b, objects of typeItorconst Itr, a value of typeIt&n, an integer of typedifference_type
The following expressions must be valid and have their specified effects
| Expression | Return type |
|---|---|
r += n |
It& |
a + n, n + a |
It |
r -= n |
It& |
i - n |
It |
b - a |
difference_type |
i[n] |
convertible to reference |
Synopsis¶
TICK_TRAIT(is_random_access_iterator,
is_bidirectional_iterator<_>,
is_totally_ordered<_>
)
{
template<class I, class Number>
auto require(I&& i, Number n) -> valid<
decltype(returns<typename std::add_lvalue_reference<I>::type>(i += n)),
decltype(returns<typename std::add_lvalue_reference<I>::type>(i -= n)),
decltype(returns<I>(i + n)),
decltype(returns<I>(i - n)),
decltype(returns<I>(n + i)),
decltype(returns<typename iterator_traits<I>::difference_type>(i - i)),
decltype(returns<typename iterator_traits<I>::reference>(i[n])),
decltype(returns<typename iterator_traits<I>::reference>(*(i + n)))
>;
template<class I>
auto require(I&& i) -> valid<
decltype(require(std::forward<I>(i), 0))
>;
};




