Namespaces
Variants

std:: incrementable_traits

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
(deprecated in C++17)
incrementable_traits
(C++20)


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 >
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) ポインタに対する特殊化。
メンバ型 difference_type を提供します。これは std::ptrdiff_t と同じです。
3) const修飾型に対する特殊化。
4) 公開かつアクセス可能なメンバ型 difference_type を定義する型に対する特殊化。
メンバ型 difference_type を提供します。これは T::difference_type と同じです。
5) 公開かつアクセス可能なメンバ型 difference_type を定義していないが、減算をサポートする型に対する特殊化。
difference_type というメンバ型を提供します。これは std:: make_signed_t < decltype ( std:: declval < T > ( ) - std:: declval < T > ( ) ) > と同じ型です。暗黙的な式バリエーションのルール(下記参照)は式 a - b に適用されます。

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

定数左辺値オペランドに対して非変更的な式を使用する requires は、 暗黙的な式バリエーション も要求します。

関連項目

semiregular 型が前置および後置インクリメント演算子でインクリメント可能であることを指定する
(コンセプト)
イテレータの関連型を計算する
(エイリアステンプレート)
イテレータのプロパティに対する統一インターフェースを提供する
(クラステンプレート)