Namespaces
Variants

deduction guides for std::ranges::subrange

From cppreference.net
Ranges library
Range adaptors
Definido en el encabezado <ranges>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >
subrange ( I, S ) - > subrange < I, S > ;
(1) (desde 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) (desde 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) (desde C++20)
template < ranges:: borrowed_range < R > >

subrange ( R && , /*tipo-sin-signo-similar*/ < ranges:: range_difference_t < R >> ) - >
subrange < ranges:: iterator_t < R > , ranges:: sentinel_t < R > ,

ranges :: subrange_kind :: sized > ;
(4) (desde C++20)

Estas guías de deducción se proporcionan para std::ranges::subrange .

1) Deduce los argumentos de plantilla a partir del tipo de iterador y centinela. El subrange tiene tamaño si se satisface std:: sized_sentinel_for < S, I > , según lo determinado por el argumento de plantilla predeterminado.
2) Deduce los argumentos de plantilla a partir del tipo de iterador y centinela, mientras que el tamaño del rango está especificado. El subrange siempre tiene tamaño.
3) Deduce los argumentos de plantilla a partir del tipo de rango. El subrange tiene tamaño si se puede obtener del rango o de su iterador y centinela.
4) Deduce los argumentos de plantilla a partir del tipo de rango, mientras que el tamaño del rango se especifica. El subrange siempre tiene tamaño.

Para la definición de /* make-unsigned-like-t */ , véase make-unsigned-like-t .

Notas

Mientras se construye el objeto subrange ,

  • para (1,2) , el comportamiento es indefinido si el par iterador-centinela no denota un rango válido,
  • para (2,4) , el comportamiento es indefinido si el tamaño dado no es igual al tamaño del rango.

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3404 C++20 se proporcionaron guías de deducción sin sentido de tipos similares a pair eliminadas