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)
定義先ヘッダ <iterator>
template < class S, class I >

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

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

sentinel_for コンセプトは、 input_or_output_iterator 型と、範囲を示す値を持つ semiregular 型との関係を指定します。説明専用のコンセプト __WeaklyEqualityComparableWith equality_comparable で説明されています。

セマンティック要件

s i がそれぞれ型 S I の値であり、 [ i , s ) range を表すものとします。 sentinel_for<S, I> は以下の場合にのみモデル化されます:

  • i == s は well-defined です。
  • bool ( i ! = s ) の場合、 i は dereferenceable であり、 [ ++ i , s ) は範囲を表します。
  • std:: assignable_from < I & , S > はモデル化されるか、または満たされません。

== の定義域は時間とともに変化することがあります。イテレータ i とセンチネル s が与えられ、 [ i , s ) が範囲を表し、 i ! = s であるとき、 i と等しい任意のイテレータをインクリメントした後も [ i , s ) が範囲を表し続けることは要求されません(したがって、そのようなインクリメント後は i == s がwell-definedであることはもはや要求されません)。

注記

センチネル型とそれに対応するイテレータ型は、 equality_comparable_with をモデル化する必要はありません。なぜなら、センチネル型自体が自身と比較可能ではない可能性があり、また共通の参照型を持つ必要もないからです。

C++17以降、 範囲ベースの for ループ において、イテレータ型と異なるセンチネル型を使用することが許可されています。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 3453 C++20 sentinel_for の意味論的要件が ranges::advance に対して緩すぎた 強化された