is_forward_iterator

Description

A forward iterator is an iterator that can read data from the pointed-to element.

Requirements

The type It satisfies is_forward_iterator if:

The type std::iterator_traits<It>::reference must be exactly

  • T& if It satisfies OutputIterator (It is mutable)
  • const T& otherwise (It is constant),

(where T is the type denoted by std::iterator_traits<It>::value_type)

And, given

  • i, dereferenceable iterator of type It
  • reference, the type denoted by std::iterator_traits<It>::reference

The following expressions must be valid and have their specified effects

Expression Return Equivalent expression
i++ It It ip=i; ++i; return ip;
*i++ reference  

Synopsis

TICK_TRAIT(is_forward_iterator, is_input_iterator<_>, is_default_constructible<_>)
{
    template<class I>
    auto require(I&& i) -> valid<
        decltype(returns<typename std::add_lvalue_reference<I>::type>(++i)),
        decltype(returns<I>(i++)),
        is_true<std::is_reference<typename iterator_traits<I>::reference>>,
        decltype(returns<typename iterator_traits<I>::value_type&>(*i)),
        decltype(returns<typename iterator_traits<I>::reference>(*i++))
    >;
};