std::ranges::subrange
Defined in header <ranges> | ||
---|---|---|
template< std::input_or_output_iterator I, std::sentinel_for<I> S > subrange(I, S) -> subrange<I, S>; | (1) | (since C++20) |
template< std::input_or_output_iterator I, std::sentinel_for<I> S > subrange(I, S, /*make-unsigned-like-t*/<std::iter_difference_t<I>>) -> subrange<I, S, ranges::subrange_kind::sized>; | (2) | (since C++20) |
template< ranges::borrowed_range<R> > subrange(R&&) -> subrange<ranges::iterator_t<R>, ranges::sentinel_t<R>, (ranges::sized_range<R> || std::sized_sentinel_for<ranges::sentinel_t<R>, ranges::iterator_t<R>>) ? ranges::subrange_kind::sized : ranges::subrange_kind::unsized>; | (3) | (since C++20) |
template< ranges::borrowed_range<R> > subrange(R&&, /*make-unsigned-like-t*/<ranges::range_difference_t<R>>) -> subrange<ranges::iterator_t<R>, ranges::sentinel_t<R>, ranges::subrange_kind::sized>; | (4) | (since C++20) |
These deduction guides are provided for std::ranges::subrange
.
subrange
is sized if std::sized_sentinel_for<S, I>
is satisfied, as determined by the default template argument.subrange
is always sized.subrange
is sized if the size can be obtained from the range or its iterator and sentinel.subrange
is always sized.The exposition-only alias template make-unsigned-like-t
maps each integer-like type to its corresponding unsigned version.
While constructing the subrange
object,
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3404 | C++20 | meaningless deduction guides from pair-like types were provided | removed |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/subrange/deduction_guides