Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

From cppreference.net
template < class I >

concept bool WeaklyIncrementable =
Semiregular < I > &&
requires ( I i ) {
typename ranges :: difference_type_t < I > ;
requires SignedIntegral < ranges :: difference_type_t < I >> ;
{ ++ i } - > Same < I > & ; /* 等価性を保持する必要はない */
i ++ ; /* 等価性を保持する必要はない */

} ;
(ranges TS)

WeaklyIncrementable<I> コンセプトは、インクリメント可能な型(前置および後置インクリメント演算子を持つ)の要件を規定します。インクリメント操作は等価性を保持する必要はなく、その型は EqualityComparable である必要はありません。

i を型 I のオブジェクトとする。 i が前置インクリメントと後置インクリメントの両方の定義域にある場合、これを インクリメント可能 であるという。 WeaklyIncrementable<I> は以下の条件を満たす場合にのみ成立する:

  • ++ i i ++ は同じドメインを持つ;
  • i がインクリメント可能な場合:
    • ++ i i ++ は両方とも i を次の要素に進める;そして
    • ++ i i と同じオブジェクトを参照する。

等価性保存

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

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

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

注記

WeaklyIncrementable 型の場合、 a b と等しいからといって、 ++ a ++ b と等しいとは限りません。このような型に対するアルゴリズムはシングルパスであるべきであり、同じ値を二度以上通過しようと試みてはなりません。