std:: sentinel_for
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定義先ヘッダ
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sentinel_for
=
|
(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
に対して緩すぎた
|
強化された |