Namespaces
Variants

deduction guides for std::ranges::subrange

From cppreference.net
Ranges library
Range adaptors
Определено в заголовке <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) Выводит аргументы шаблона из типа итератора и sentinel, при этом размер диапазона указан. subrange всегда является sized.
3) Выводит аргументы шаблона из типа диапазона. subrange является размерным, если размер может быть получен из диапазона или его итератора и ограничителя.
4) Выводит аргументы шаблона из типа диапазона, при этом размер диапазона указан. subrange всегда является sized.

Для определения /* 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