Range-v3
Range algorithms, views, and actions for the Standard Library
Range Concepts

Range concepts. More...

Classes

struct  ranges::bidirectional_range_tag
 
struct  ranges::common_range_tag
 
struct  ranges::contiguous_range_tag
 
struct  ranges::forward_range_tag
 
struct  ranges::input_range_tag
 
struct  ranges::random_access_range_tag
 
struct  ranges::range_tag
 
struct  ranges::sized_range_tag
 

Typedefs

template<typename Rng >
using ranges::common_range_tag_of = std::enable_if_t< range< Rng >, meta::conditional_t< common_range< Rng >, common_range_tag, range_tag > >
 
template<typename Rng >
using ranges::range_tag_of = std::enable_if_t< range< Rng >, meta::conditional_t< contiguous_range< Rng >, contiguous_range_tag, meta::conditional_t< random_access_range< Rng >, random_access_range_tag, meta::conditional_t< bidirectional_range< Rng >, bidirectional_range_tag, meta::conditional_t< forward_range< Rng >, forward_range_tag, meta::conditional_t< input_range< Rng >, input_range_tag, range_tag > >> >> >
 
template<typename Rng >
using ranges::sized_range_tag_of = std::enable_if_t< range< Rng >, meta::conditional_t< sized_range< Rng >, sized_range_tag, range_tag > >
 

Variables

template<typename T >
concept ranges::_range_ = requires( T & t ) { ranges::begin(t), ranges::end(t) ; }
 \concept range More...
 
template<typename T >
concept ranges::bbidirectional_range
 \concept bidirectional_range More...
 
template<typename T >
concept ranges::bborrowed_range
 \concept borrowed_range More...
 
concept ranges::bidirectional_iterator< iterator_t< T > >
 
concept ranges::bidirectional_range_ =
 
template<typename T >
concept ranges::ccommon_range
 \concept common_range More...
 
template<typename T >
concept ranges::ccontiguous_range
 \concept contiguous_range More...
 
concept ranges::common_range_ =
 
concept ranges::contiguous_range_ =
 
template<typename T >
constexpr bool ranges::enable_view
 
template<typename T >
concept ranges::fforward_range
 \concept forward_range More...
 
concept ranges::forward_iterator< iterator_t< T > >
 
concept ranges::forward_range_ =
 
template<typename T >
concept ranges::iinput_range
 \concept input_range More...
 
concept ranges::input_iterator< iterator_t< T > >
 
concept ranges::input_range_ =
 
template<typename T , typename V >
concept ranges::ooutput_range
 \concept output_range More...
 
concept ranges::output_iterator< iterator_t< T >, V >
 
concept ranges::output_range_ =
 
concept ranges::random_access_iterator< iterator_t< T > >
 
concept ranges::random_access_range_ =
 
template<typename T >
concept ranges::rrandom_access_range
 \concept random_access_range More...
 
template<typename T >
concept ranges::rrange
 \concept range More...
 
template<typename R >
constexpr bool ranges::safe_range = borrowed_range<R>
 
concept ranges::same_as< iterator_t< T >, sentinel_t< T > >
 
template<typename T >
concept ranges::sized_range_ = requires( T & t ) { ranges::size(t) ; }
 \concept sized_range_ More...
 
template<typename T >
concept ranges::ssized_range
 \concept sized_range More...
 
template<typename T >
concept ranges::vview_
 \concept view_ More...
 
template<typename T >
concept ranges::vviewable_range
 \concept viewable_range More...
 

Detailed Description

Range concepts.

Variable Documentation

◆ _range_

template<typename T >
concept ranges::_range_ = requires( T & t ) { ranges::begin(t), ranges::end(t) ; }

#include <range/v3/range/concepts.hpp>

\concept range

The range concept

◆ bbidirectional_range

template<typename T >
concept ranges::bbidirectional_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
forward_range<T> && ranges::bidirectional_range_ < T >

\concept bidirectional_range

The bidirectional_range concept

◆ bborrowed_range

template<typename T >
concept ranges::bborrowed_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> && detail::_borrowed_range<T>

\concept borrowed_range

The borrowed_range concept

◆ ccommon_range

template<typename T >
concept ranges::ccommon_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> && ranges::common_range_ < T >

\concept common_range

The common_range concept

◆ ccontiguous_range

template<typename T >
concept ranges::ccontiguous_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
random_access_range<T> && ranges::contiguous_range_ < T >

\concept contiguous_range

The contiguous_range concept

◆ enable_view

template<typename T >
constexpr bool ranges::enable_view
constexpr

#include <range/v3/range/concepts.hpp>

Initial value:
=
ext::enable_view<T>::value

◆ fforward_range

template<typename T >
concept ranges::fforward_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
input_range<T> && ranges::forward_range_ < T >

\concept forward_range

The forward_range concept

◆ iinput_range

template<typename T >
concept ranges::iinput_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> && ranges::input_range_ < T >

\concept input_range

The input_range concept

◆ ooutput_range

template<typename T , typename V >
concept ranges::ooutput_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> && ranges::output_range_ < T, V >

\concept output_range

The output_range concept

◆ rrandom_access_range

template<typename T >
concept ranges::rrandom_access_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
bidirectional_range<T> && ranges::random_access_range_ < T >

\concept random_access_range

The random_access_range concept

◆ rrange

template<typename T >
concept ranges::rrange

#include <range/v3/range/concepts.hpp>

Initial value:
=
ranges::_range_ < T >

\concept range

The range concept

◆ sized_range_

template<typename T >
concept ranges::sized_range_ = requires( T & t ) { ranges::size(t) ; }

#include <range/v3/range/concepts.hpp>

\concept sized_range_

The sized_range_ concept

◆ ssized_range

template<typename T >
concept ranges::ssized_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> &&
!disable_sized_range<uncvref_t<T>> &&
ranges::sized_range_ < T > &&
ranges::sized_range_ < T >

\concept sized_range

The sized_range concept

◆ vview_

template<typename T >
concept ranges::vview_

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> &&
semiregular<T> &&
enable_view<T>

\concept view_

The view_ concept

◆ vviewable_range

template<typename T >
concept ranges::vviewable_range

#include <range/v3/range/concepts.hpp>

Initial value:
=
range<T> &&
(borrowed_range<T> || view_<uncvref_t<T>>)

\concept viewable_range

The viewable_range concept