std::incrementable_traits
提供: cppreference.com
ヘッダ <iterator> で定義 | ||
template<class I > struct incrementable_traits {}; | (1) | (C++20以上) |
template<class T > requires std::is_object_v<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;} | (4) | (C++20以上) |
template<class T > requires (!requires {typename T::difference_type;})&& | (5) | (C++20以上) |
型 I
の関連する差型を計算します。 ユーザはプログラム定義の型に対して incrementable_traits
を特殊化しても構いません。
1) プライマリテンプレートは空の構造体です。
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 式は、そのような式のバリエーションが異なるセマンティクスで明示的に要求されなければ、与えられた被演算子に対して非定数左辺値または (定数かもしれない) 右辺値を受理するその式の追加のバリエーションも暗黙に要求します。 これらの暗黙の式のバリエーションは、宣言された式のセマンティクスの要件を満たさなければなりません。 処理系がバリエーションの構文を検証する範囲は未規定です。
[編集]例
This section is incomplete Reason: no example |
[編集]関連項目
前置または後置インクリメント演算子で semiregular 型をインクリメントできることを指定します (コンセプト) | |
イテレータの関連型を計算します (エイリアステンプレート) | |
イテレータの性質への統一されたインタフェースを提供します (クラステンプレート) |