Namespaces
Variants

deduction guides for std::ranges::subrange

From cppreference.net
Ranges library
Range adaptors
(Anmerkung: Der bereitgestellte HTML-Code enthält keinen übersetzbaren Text, da alle Tags und Attribute gemäß den Anweisungen unverändert bleiben sollen und die Zelleninhalte leer sind.)
Definiert im Header <ranges>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >
subrange ( I, S ) - > subrange < I, S > ;
(1) (seit 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) (seit 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) (seit 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) (seit C++20)

Diese Deduction Guides werden für std::ranges::subrange bereitgestellt.

1) Leitet die Template-Argumente vom Typ des Iterators und Sentinels ab. Der subrange ist größenbehaftet, wenn std:: sized_sentinel_for < S, I > erfüllt ist, wie durch das Standard-Template-Argument bestimmt.
2) Leitet die Template-Argumente vom Typ des Iterators und Sentinels ab, während die Größe des Bereichs angegeben ist. Der subrange ist immer sized.
3) Leitet die Template-Argumente vom Typ des Bereichs ab. Der subrange ist größenbehaftet, wenn die Größe vom Bereich oder seinem Iterator und Sentinel ermittelt werden kann.
4) Leitet die Template-Argumente vom Typ des Ranges ab, während die Größe des Ranges angegeben wird. Der subrange ist immer sized.

Für die Definition von /* make-unsigned-like-t */ , siehe make-unsigned-like-t .

Hinweise

Während der Erstellung des subrange -Objekts,

  • für (1,2) ist das Verhalten undefiniert, wenn das Iterator-Sentinel-Paar keinen gültigen Bereich bezeichnet,
  • für (2,4) ist das Verhalten undefiniert, wenn die gegebene Größe nicht der Größe des Bereichs entspricht.

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3404 C++20 bedeutungslose Deduction Guides von paarähnlichen Typen wurden bereitgestellt entfernt