Range Concepts
Range

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