Namespaces
Variants

std:: sentinel_for

From ja.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に対して緩すぎた 強化された