Namespaces
Variants

std:: weakly_incrementable

From ja.cppreference.net
Iterator library
Iterator concepts
weakly_incrementable
(C++20)
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 I >

concept weakly_incrementable =
std:: movable < I > &&
requires ( I i ) {
typename std:: iter_difference_t < I > ;
requires /*符号付き整数様*/ < std:: iter_difference_t < I >> ;
{ ++ i } - > std:: same_as < I & > ; // 等価性を保持する必要はない
i ++ ; // 等価性を保持する必要はない

} ;
(C++20以降)

/*is-signed-integer-like*/ の定義については、 is-integer-like を参照してください。

このコンセプトは、前置および後置インクリメント演算子でインクリメント可能な型に対する要件を定義します。ただし、これらのインクリメント操作は必ずしも equality-preserving ではなく、型自体が std::equality_comparable である必要はありません。

std::weakly_incrementable型の場合、 a == b が成り立つことは ++ a == ++ b を意味しません。弱インクリメント可能型に対するアルゴリズムはシングルパスアルゴリズムでなければなりません。これらのアルゴリズムは、 std::istream_iterator を通じて入力データのソースとしてistreamと共に使用できます。

セマンティック要件

型 I のオブジェクト i について、 I が std::weakly_incrementable をモデルするのは、以下の条件がすべて満たされる場合に限ります:

  • 式 ++ i と i ++ は同じドメインを持つ。
  • i がインクリメント可能な場合、 ++ i と i ++ の両方が i を進める。
  • i がインクリメント可能な場合、 std:: addressof ( ++ i ) == std:: addressof ( i ) が成り立つ。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
P2325R3 C++20 default_initializable が要求されていた 要求されない

関連項目

weakly_incrementable 型に対するインクリメント操作が 等価性保存 であり、かつその型が equality_comparable であることを指定する
(コンセプト)