Spec-Zone.ru › C++

Руководства по выводу для 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 отображает каждый тип-подобный целому числу на его соответствующую беззнаковую версию.

Примечания

При создании объекта 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/w/cpp/ranges/subrange/deduction_guides

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API