Namespaces
Variants

Ableitungsregeln für std::ranges::subrange

Von de.cppreference.net
 
 
Bereichsbibliothek
Bereichsadapter
 
 
Definiert in 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 Ableitungsregeln werden für std::ranges::subrange bereitgestellt.

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

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