Namespaces
Variants

deduction guides for std::ranges::subrange

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >
subrange ( I, S ) - > subrange < I, S > ;
(1) (depuis 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) (depuis 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) (depuis 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) (depuis C++20)

Ces guides de déduction sont fournis pour std::ranges::subrange .

1) Déduit les arguments de template à partir du type de l'itérateur et du sentinelle. Le subrange est dimensionné si std:: sized_sentinel_for < S, I > est satisfait, tel que déterminé par l'argument de template par défaut.
2) Déduit les arguments du template à partir du type de l'itérateur et du sentinelle, tandis que la taille de la plage est spécifiée. Le subrange est toujours dimensionné.
3) Déduit les arguments du template à partir du type de la plage. Le subrange est dimensionné si la taille peut être obtenue à partir de la plage ou de son itérateur et de son sentinelle.
4) Déduit les arguments du template à partir du type de la plage, tandis que la taille de la plage est spécifiée. Le subrange est toujours dimensionné.

Pour la définition de /* make-unsigned-like-t */ , voir make-unsigned-like-t .

Notes

Lors de la construction de l'objet subrange ,

  • pour (1,2) , le comportement est indéfini si la paire itérateur-sentinelle ne dénote pas une plage valide,
  • pour (2,4) , le comportement est indéfini si la taille donnée n'est pas égale à la taille de la plage.

Exemple

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3404 C++20 des guides de déduction inutiles depuis les types de type paire étaient fournis supprimés