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
It
satisfies is_bidirectional_iterator - The type
It
satisfies is_totally_ordered
And, given
value_type
, the type denoted bystd::iterator_traits<It>::value_type
difference_type
, the type denoted bystd::iterator_traits<It>::difference_type
reference
, the type denoted bystd::iterator_traits<It>::reference
i
,a
,b
, objects of typeIt
orconst It
r
, 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))
>;
};