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

Classes | Typedefs | Variables
Range Concepts
Range

## Description

Range concepts

## 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_
| Range concepts below. More...
template<typename T >
concept | ranges::bidirectional_range
template<typename T >
concept | ranges::bidirectional_range__concept_ = bidirectional_iterator<iterator_t<T>>
template<typename T >
concept | ranges::borrowed_range
template<typename T >
concept | ranges::common_range
template<typename T >
concept | ranges::common_range__concept_ = same_as<iterator_t<T>, sentinel_t<T>>
template<typename T >
concept | ranges::contiguous_range
template<typename T >
concept | ranges::contiguous_range__concept_ = contiguous_iterator<iterator_t<T>> && same_as<detail::data_t<T>, std::add_pointer_t<iter_reference_t<iterator_t<T>>>>
template<typename T >
constexpr bool | ranges::enable_view
template<typename T >
concept | ranges::forward_range
template<typename T >
concept | ranges::forward_range__concept_ = forward_iterator<iterator_t<T>>
template<typename T >
concept | ranges::input_range
template<typename T >
concept | ranges::input_range__concept_ = input_iterator<iterator_t<T>>
template<typename T , typename V >
concept | ranges::output_range
template<typename T , typename V >
concept | ranges::output_range__concept_ = output_iterator<iterator_t<T>, V>
template<typename T >
concept | ranges::random_access_range
template<typename T >
concept | ranges::random_access_range__concept_ = random_access_iterator<iterator_t<T>>
template<typename R >
constexpr bool | ranges::safe_range = borrowed_range<R>
template<typename T >
concept | ranges::sized_range
template<typename T >
concept | ranges::sized_range__requires_
template<typename T >
concept | ranges::view_
| View concepts below. More...
template<typename T >
concept | ranges::viewable_range

## Variable Documentation

## ◆ _range__requires_

template<typename T >

concept ranges::_range__requires_

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

Initial value:
= CPP_REQUIRES_requires `(T & t)
template<typename T>
concept range =
ranges::_range__requires_<T>

Range concepts below.

## ◆ bidirectional_range

template<typename T >

concept ranges::bidirectional_range

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

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

## ◆ borrowed_range

template<typename T >

concept ranges::borrowed_range

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

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

## ◆ common_range

template<typename T >

concept ranges::common_range

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

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

## ◆ contiguous_range

template<typename T >

concept ranges::contiguous_range

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

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

## ◆ enable_view

template<typename T >

constexpr bool ranges::enable_view
| constexpr

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

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

## ◆ forward_range

template<typename T >

concept ranges::forward_range

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

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

## ◆ input_range

template<typename T >

concept ranges::input_range

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

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

## ◆ output_range

template<typename T , typename V >

concept ranges::output_range

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

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

## ◆ random_access_range

template<typename T >

concept ranges::random_access_range

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

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

## ◆ sized_range

template<typename T >

concept ranges::sized_range

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

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

## ◆ sized_range__requires_

template<typename T >

concept ranges::sized_range__requires_

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

Initial value:
= CPP_REQUIRES_requires `(T & t)
template<typename T > concept sized_range__concept_ = detail::integer_like_<range_size_t<T>>

## ◆ view_

template<typename T >

concept ranges::view_

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

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

View concepts below.

## ◆ viewable_range

template<typename T >

concept ranges::viewable_range

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

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