Range-v3
Range algorithms, views, and actions for the Standard Library
ranges::subrange< I, S, K > Struct Template Reference
+ Inheritance diagram for ranges::subrange< I, S, K >:

Public Types

using iterator = I
 
using sentinel = S
 
using size_type = detail::iter_size_t< I >
 

Public Member Functions

constexpr subrangeadvance (iter_difference_t< I > n)
 
constexpr I begin () const noexcept(std::is_nothrow_copy_constructible< I >::value)
 
constexpr bool empty () const
 
constexpr S end () const noexcept(std::is_nothrow_copy_constructible< S >::value)
 
constexpr subrange next (iter_difference_t< I > n=1) const
 
template<typename PairLike >
requires (!same_as<PairLike, subrange>) && detail::pair_like_convertible_from_<PairLike, I const &, S const &>
constexpr operator PairLike () const
 
constexpr auto prev (iter_difference_t< I > n=1) const -> subrange
 
constexpr auto size () const -> size_type
 
template<typename I2 >
requires detail::convertible_to_not_slicing_<I2, I> && (!detail::store_size_<K, S, I>())
constexpr subrange (I2 &&i, S s)
 
template<typename I2 >
requires detail::convertible_to_not_slicing_<I2, I> && (detail::store_size_<K, S, I>())
constexpr subrange (I2 &&i, S s, size_type n)
 
template<typename I2 >
requires detail::convertible_to_not_slicing_<I2, I> && sized_sentinel_for<S, I>
constexpr subrange (I2 &&i, S s, size_type n)
 
template<typename R >
requires (!same_as<detail::decay_t<R>, subrange>) && detail::range_convertible_to_<R, I, S> && (!detail::store_size_<K, S, I>())
constexpr subrange (R &&r)
 
template<typename R >
requires (!same_as<detail::decay_t<R>, subrange>) && detail::range_convertible_to_<R, I, S> && (detail::store_size_<K, S, I>()) && sized_range<R>
constexpr subrange (R &&r)
 
template<typename R >
requires (K == subrange_kind::sized) && detail::range_convertible_to_<R, I, S>
constexpr subrange (R &&r, size_type n)
 
- Public Member Functions inherited from ranges::view_interface< subrange< I, S, K >, same_as< S, unreachable_sentinel_t > ? infinite :K==subrange_kind::sized ? finite :unknown >
constexpr auto empty () const noexcept -> bool
 Test whether a range can be empty:
 
&&!detail ::has_fixed_size_< Cardinality > &&forward_range< D< True > const > constexpr bool empty () const noexcept(noexcept(bool(ranges::begin(std::declval< D< True > const & >())==ranges::end(std::declval< D< True > const & >()))))
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
&&Cardinality< 0) &&(Cardinality !=infinite) &&(!forward_range< D< True > >) &&sized_range< D< True > > constexpr bool empty() noexcept(noexcept(bool(ranges::size(std::declval< D< True > & >())==0))) { return ranges::size(derived())==0;} template< bool True=true > &&Cardinality< 0) &&(Cardinality !=infinite) &&(!forward_range< D< True > const >) &&sized_range< D< True > const > constexpr bool empty() const noexcept(noexcept(bool(ranges::size(std::declval< D< True > const & >())==0))) { return ranges::size(derived())==0;} template< bool True=true > &&!detail ::has_fixed_size_< Cardinality > &&forward_range< D< True > > constexpr bool empty () noexcept(noexcept(bool(ranges::begin(std::declval< D< True > & >())==ranges::end(std::declval< D< True > & >()))))
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
&&detail::can_empty_< D< True > const > constexpr operator bool () const noexcept(noexcept(ranges::empty(std::declval< D< True > const & >())))
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
&&detail::can_empty_< D< True > > constexpr operator bool () noexcept(noexcept(ranges::empty(std::declval< D< True > & >())))
 
view_interfaceoperator= (view_interface &&)=default
 
view_interfaceoperator= (view_interface const &)=default
 
 view_interface (view_interface &&)=default
 
 view_interface (view_interface const &)=default
 

Additional Inherited Members

- Protected Types inherited from ranges::view_interface< subrange< I, S, K >, same_as< S, unreachable_sentinel_t > ? infinite :K==subrange_kind::sized ? finite :unknown >
using D = meta::invoke< detail::dependent_< B >, subrange< I, S, K > >
 
- Protected Member Functions inherited from ranges::view_interface< subrange< I, S, K >, same_as< S, unreachable_sentinel_t > ? infinite :K==subrange_kind::sized ? finite :unknown >
constexpr subrange< I, S, K > const & derived () const noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
constexpr subrange< I, S, K > & derived () noexcept