10 Ranges library [ranges]

10.3 Header <experimental/ranges/range> synopsis [range.synopsis]

#include <experimental/ranges/iterator>

namespace std { namespace experimental { namespace ranges { inline namespace v1 {
  // [range.access], range access:
  namespace {
    constexpr unspecified begin = unspecified;
    constexpr unspecified end = unspecified;
    constexpr unspecified cbegin = unspecified;
    constexpr unspecified cend = unspecified;
    constexpr unspecified rbegin = unspecified;
    constexpr unspecified rend = unspecified;
    constexpr unspecified crbegin = unspecified;
    constexpr unspecified crend = unspecified;
  }

  // [range.primitives], range primitives:
  namespace {
    constexpr unspecified size = unspecified;
    constexpr unspecified empty = unspecified;
    constexpr unspecified data = unspecified;
    constexpr unspecified cdata = unspecified;
  }

  template <class T>
  using iterator_t = decltype(ranges::begin(declval<T&>()));

  template <class T>
  using sentinel_t = decltype(ranges::end(declval<T&>()));

  template <class>
  constexpr bool disable_sized_range = false;

  template <class T>
  struct enable_view { };

  struct view_base { };

  // [ranges.requirements], range requirements:

  // [ranges.range], Range:
  template <class T>
  concept bool Range = see below;

  // [ranges.sized], SizedRange:
  template <class T>
  concept bool SizedRange = see below;

  // [ranges.view], View:
  template <class T>
  concept bool View = see below;

  // [ranges.bounded], BoundedRange:
  template <class T>
  concept bool BoundedRange = see below;

  // [ranges.input], InputRange:
  template <class T>
  concept bool InputRange = see below;

  // [ranges.output], OutputRange:
  template <class R, class T>
  concept bool OutputRange = see below;

  // [ranges.forward], ForwardRange:
  template <class T>
  concept bool ForwardRange = see below;

  // [ranges.bidirectional], BidirectionalRange:
  template <class T>
  concept bool BidirectionalRange = see below;

  // [ranges.random.access], RandomAccessRange:
  template <class T>
  concept bool RandomAccessRange = see below;
}}}}