Namespaces
Variants

std:: sentinel_for

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definiert in Header <iterator>
template < class S, class I >

concept sentinel_for =
std:: semiregular < S > &&
std:: input_or_output_iterator < I > &&

__WeaklyEqualityComparableWith < S, I > ;
(seit C++20)

Das sentinel_for -Konzept spezifiziert die Beziehung zwischen einem input_or_output_iterator -Typ und einem semiregular -Typ, dessen Werte einen Bereich bezeichnen. Das nur zur Darstellung dienende Konzept __WeaklyEqualityComparableWith wird beschrieben in equality_comparable .

Semantische Anforderungen

Seien s und i Werte vom Typ S bzw. I , sodass [ i , s ) einen Range bezeichnet. sentinel_for<S, I> wird nur modelliert, wenn:

  • i == s ist wohldefiniert.
  • Falls bool ( i ! = s ) dann ist i dereferenzierbar und [ ++ i , s ) bezeichnet einen Bereich.
  • std:: assignable_from < I & , S > wird entweder modelliert oder nicht erfüllt.

Der Bereich von == kann sich im Laufe der Zeit ändern. Gegeben ein Iterator i und ein Sentinel s , sodass [ i , s ) einen Bereich bezeichnet und i ! = s , [ i , s ) muss nach dem Inkrementieren eines beliebigen Iterators, der gleich i ist, nicht weiterhin einen Bereich bezeichnen (und somit ist i == s nach einem solchen Inkrement nicht länger zwingend wohldefiniert).

Hinweise

Ein Sentinel-Typ und sein entsprechender Iterator-Typ müssen nicht das Konzept equality_comparable_with modellieren, da der Sentinel-Typ möglicherweise nicht mit sich selbst vergleichbar ist, und sie müssen keinen gemeinsamen Referenztyp besitzen.

Es ist seit C++17 erlaubt, einen Sentinel-Typ zu verwenden, der sich vom Iterator-Typ im bereichsbasierten for -Loop unterscheidet.

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 3453 C++20 Semantische Anforderungen für sentinel_for waren zu locker für ranges::advance verstärkt