std::experimental::ranges::SizedSentinel
| Defined in header <experimental/ranges/iterator> |
||
| template< class S, class I > concept bool SizedSentinel = |
(1) | (ranges TS) |
| template< class S, class I > constexpr bool disable_sized_sentinel = false; |
(1) | (ranges TS) |
SizedSentinel コンセプトは、イテレータ型 I のオブジェクトとセンチネル型 S のオブジェクトを減算することで、それらの間の距離を定数時間で計算できることを指定します。
I 型のイテレータ i と、範囲 [i, s) を表す S 型のセンチネル s があるとします。++i の最小適用回数で bool(i == s) が真になるような最小回数を N とします。このとき、SizedSentinel<S, I> は以下の場合にのみ満たされます。
Nが ranges::difference_type_t<I> で表現可能な場合、s - iは well-defined であり、Nに等しくなります。-Nが ranges::difference_type_t<I> で表現可能な場合、i - sは well-defined であり、-Nに等しくなります。
変数テンプレート disable_sized_sentinel は、減算可能であるが SizedSentinel の意味論的要件を満たさないイテレータとセンチネルが、変数テンプレートを true に特殊化することでコンセプトからオプトアウトするためのメカニズムを提供します。
[編集] 等価性保持
式が**等価性保持**であるとは、等しい入力に対して等しい出力を生成することを意味します。
- 式の入力は、そのオペランドで構成されます。
- 式の出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。
等価性保持が要求されるすべての式は、さらに**安定**である必要があります。同じ入力オブジェクトでそのような式の2回の評価は、これらの入力オブジェクトの明示的な介入的な変更がない限り、等しい出力を持ちます。
特に断りがない限り、requires-expression で使用されるすべての式は、等価性を保持し、安定であることが要求され、式の評価は定数でないオペランドのみを変更できます。定数のオペランドは変更してはいけません。
[編集] 暗黙的な式バリエーション
ある定数左辺値オペランドに対して非変更的な式を使用する requires-expression は、明示的に異なる意味で要求されていない限り、そのオペランドに対して非定数左辺値または(定数であるか否かにかかわらず)右辺値を受け入れる、その式の追加のバリエーションも暗黙的に要求します。これらの 暗黙的な式バリエーション は、宣言された式の意味要件と同じ要件を満たさなければなりません。実装がこれらのバリエーションの構文をどの程度検証するかは未規定です。