руководства по выводу типов для std::ranges::subrange
С сайта ru.cppreference.net
| Определён в заголовке <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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3404 | C++20 | meaningless deduction guides from pair-like types were provided | removed |