名前空間
変種
操作

std::incrementable_traits

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータコンセプト
イテレータプリミティブ
incrementable_traits
(C++20)

イテレータアダプタ
ストリームイテレータ
イテレータのカスタマイゼーションポイント
イテレータ操作
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
ヘッダ <iterator> で定義
template< class I >
struct incrementable_traits { };
(1) (C++20以上)
template< class T >

    requires std::is_object_v<T>

struct incrementable_traits<T*>;
(2) (C++20以上)
template< class T >
struct incrementable_traits<const T> : incrementable_traits<T> { };
(3) (C++20以上)
template< class T >

  requires requires { typename T::difference_type; }

struct incrementable_traits<T>;
(4) (C++20以上)
template< class T >

  requires (!requires { typename T::difference_type; }) &&
           requires(const T& a, const T& b) { { a - b } -> std::integral; }

struct incrementable_traits<T>;
(5) (C++20以上)

I の関連する差型を計算します。 ユーザはプログラム定義の型に対して incrementable_traits を特殊化しても構いません。

1) プライマリテンプレートは空の構造体です。
2) ポインタに対する特殊化。 std::ptrdiff_t に等しいメンバ型 difference_type を提供します。
3) const 修飾された型に対する特殊化。
4) パブリックかつアクセス可能なメンバ型 difference_type を定義している型に対する特殊化。 T::difference_type に等しいメンバ型 difference_type を提供します。
5) パブリックかつアクセス可能なメンバ型 difference_type を定義していないけれども減算をサポートしている型に対する特殊化。 std::make_signed_t<decltype(std::declval<T>() - std::declval<T>())> に等しいメンバ型 difference_type を提供します。 暗黙の式のバリエーションのルール (後述) が式 a - b に適用されます。

[編集] 暗黙の式のバリエーション

何らかの定数左辺値の被演算子に対して変更しない式を使用する requires 式は、そのような式のバリエーションが異なるセマンティクスで明示的に要求されなければ、与えられた被演算子に対して非定数左辺値または (定数かもしれない) 右辺値を受理するその式の追加のバリエーションも暗黙に要求します。 これらの暗黙の式のバリエーションは、宣言された式のセマンティクスの要件を満たさなければなりません。 処理系がバリエーションの構文を検証する範囲は未規定です。

[編集]

[編集] 関連項目

前置または後置インクリメント演算子で semiregular 型をインクリメントできることを指定します
(コンセプト) [edit]
イテレータの関連型を計算します
(エイリアステンプレート) [edit]
イテレータの性質への統一されたインタフェースを提供します
(クラステンプレート) [edit]