направляющие вывода для std::ranges::subrange
Определено в заголовке <ranges> | ||
|---|---|---|
template< std::input_or_output_iterator I, std::sentinel_for<I> S > subrange(I, S) -> subrange<I, S>; | (1) | (с 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) | (с 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) | (с 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) | (с C++20) |
Эти направляющие вывода предоставляются для std::ranges::subrange.
1) Выводит аргументы шаблона на основе типов итератора и сентинела.
subrange имеет известный размер, если выполняется std::sized_sentinel_for<S, I>, что определяется аргументом шаблона по умолчанию.
2) Выводит аргументы шаблона на основе типов итератора и сентинела, при этом размер диапазона задаётся явно.
subrange всегда имеет известный размер.
3) Выводит аргументы шаблона на основе типа диапазона.
subrange имеет известный размер, если размер можно получить из диапазона либо его итератора и сентинела.
4) Выводит аргументы шаблона на основе типа диапазона, при этом размер диапазона задаётся явно.
subrange всегда имеет известный размер.Определение /* make-unsigned-like-t */ см. в make-unsigned-like-t .
Примечания
При создании объекта subrange
- для (1,2) поведение не определено, если пара «итератор–сентинел» не обозначает допустимый диапазон;
- для (2,4) поведение не определено, если заданный размер не равен размеру диапазона.
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применено к | Опубликованное поведение | Исправленное поведение |
|---|---|---|---|
| LWG 3404 | C++20 | предоставлялись бессмысленные направляющие вывода для типов, подобных парам | удалены |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/subrange/deduction_guides