Namensräume
Varianten
Aktionen

Deduktionshilfen für std::ranges::subrange

Von cppreference.com
< cpp‎ | ranges‎ | subrange
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <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 Deduktionshilfen werden für std::ranges::subrange bereitgestellt.

1) Deduziert die Template-Argumente aus dem Typ des Iterators und des Sentinels. Der subrange ist "sized" (hat eine bekannte Größe), wenn std::sized_sentinel_for<S, I> erfüllt ist, wie durch das Standard-Template-Argument bestimmt.
2) Deduziert die Template-Argumente aus dem Typ des Iterators und des Sentinels, während die Größe des Bereichs angegeben ist. Der subrange ist immer "sized".
3) Deduziert die Template-Argumente aus dem Typ des Bereichs. Der subrange ist "sized", wenn die Größe aus dem Bereich oder seinem Iterator und Sentinel ermittelt werden kann.
4) Deduziert die Template-Argumente aus dem Typ des Bereichs, während die Größe des Bereichs angegeben ist. Der subrange ist immer "sized".

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

[bearbeiten] Anmerkungen

Beim Erstellen des subrange-Objekts gilt:

  • 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 angegebene Größe nicht mit der Größe des Bereichs übereinstimmt.

[bearbeiten] Beispiel

[bearbeiten] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3404 C++20 bedeutunglose Deduktionshilfen von paarähnlichen Typen wurden bereitgestellt entfernt