Namespaces
Variants

std::experimental::ranges:: SizedSentinel

From cppreference.net
template < class S, class I >

concept bool SizedSentinel =
Sentinel < S, I > &&
! ranges :: disable_sized_sentinel < std:: remove_cv_t < S > , std:: remove_cv_t < I >> &&
requires ( const I & i, const S & s ) {
{ s - i } - > Same < ranges :: difference_type_t < I >> && ;
{ i - s } - > Same < ranges :: difference_type_t < I >> && ;

} ;
(1) (ranges TS)
template < class S, class I >
constexpr bool disable_sized_sentinel = false ;
(1) (ranges TS)

SizedSentinel コンセプトは、イテレータ型 I のオブジェクトと番兵型 S のオブジェクトが減算可能であり、それらの間の距離を定数時間で計算できることを指定します。

i を型 I のイテレータ、 s を型 S のセンチネルとし、 [ i , s ) が範囲を表すものとする。 N bool ( i == s ) が真となるために必要な ++i の適用回数の最小値とする。このとき、 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 を持つようにすることで、コンセプトからオプトアウトするメカニズムを提供します。

等価性保存

式は、等しい入力が与えられた場合に等しい出力をもたらす場合、 equality preserving であると言います。

  • 式への入力は、そのオペランドで構成されます。
  • 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

等価性を保持することが要求されるすべての式は、さらに stable(安定性) が要求されます:同じ入力オブジェクトに対するそのような式の2回の評価は、それらの入力オブジェクトに対する明示的な変更がない限り、等しい出力を持たなければなりません。

特に明記されていない限り、 requires式 で使用される各式は、等価性を保存し安定していることが要求され、式の評価は非定数オペランドのみを変更できます。定数オペランドは変更してはなりません。

暗黙的な式のバリエーション

requires-expression は、特定の定数左辺値オペランドに対して非変更的な式を使用する場合、そのオペランドに対して非定数左辺値または(場合によっては定数の)右辺値を受け入れる式の追加バリエーションも暗黙的に要求します。ただし、異なるセマンティクスを持つ式バリエーションが明示的に要求されている場合は除きます。これらの implicit expression variations は、宣言された式と同じセマンティック要件を満たさなければなりません。実装がこれらのバリエーションの構文をどこまで検証するかは未規定です。