deduction guides for 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>>) -> | (2) | (since C++20) | 
| template< ranges::borrowed_range<R> > subrange(R&&) -> | (3) | (since C++20) | 
| template< ranges::borrowed_range<R> > subrange(R&&, /*make-unsigned-like-t*/<ranges::range_difference_t<R>>) -> | (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.
Notes
While constructing the subrange object,
- for (1,2), the behavior is undefined if the iterator-sentinel pair does not denote a valid range,
- for (2,4), the behavior is undefined if the given size is not equal to the size of the range.
Example
| This section is incomplete Reason: no example | 
Defect reports
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 |