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)
Definiert im Header <iterator>
template < class I >
struct incrementable_traits { } ;
(1) (seit C++20)
template < class T >

requires std:: is_object_v < T >

struct incrementable_traits < T * > ;
(2) (seit C++20)
template < class T >

struct incrementable_traits < const T >

: incrementable_traits < T > { } ;
(3) (seit C++20)
template < class T >

requires requires { typename T :: difference_type ; }

struct incrementable_traits < T > ;
(4) (seit 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) (seit C++20)

Berechnet den zugehörigen Differenztyp des Typs I , falls vorhanden. Ein Programm kann incrementable_traits für einen programmdefinierten Typ spezialisieren.

1) Primäres Template ist eine leere Struktur.
2) Spezialisierung für Zeiger.
Stellt einen Member-Typ difference_type bereit, der gleich std::ptrdiff_t ist.
3) Spezialisierung für const-qualifizierte Typen.
4) Spezialisierung für Typen, die einen öffentlichen und zugänglichen Member-Typ difference_type definieren.
Stellt einen Member-Typ difference_type bereit, der gleich T::difference_type ist.
5) Spezialisierung für Typen, die keinen öffentlichen und zugänglichen Member-Typ difference_type definieren, aber Subtraktion unterstützen.
Stellt einen Member-Typ difference_type bereit, der gleich std:: make_signed_t < decltype ( std:: declval < T > ( ) - std:: declval < T > ( ) ) > ist. Die Regel für implizite Ausdrucksvariationen (siehe unten) gilt für den Ausdruck a - b .

Implizite Ausdrucksvarianten

Ein requires -Ausdruck , der einen Ausdruck verwendet, der für einen konstanten Lvalue-Operanden nicht-modifizierend ist, erfordert ebenfalls implizite Ausdrucksvarianten .

Beispiel

Siehe auch

spezifiziert, dass ein semiregular Typ mit Prä- und Post-Inkrementoperatoren inkrementiert werden kann
(Konzept)
berechnet die assoziierten Typen eines Iterators
(Alias-Template)
bietet eine einheitliche Schnittstelle für die Eigenschaften eines Iterators
(Klassen-Template)