Namespaces
Variants

std::experimental::ranges:: difference_type

From cppreference.net
template < class I >
struct difference_type { } ;
(1)
template < class T >
struct difference_type < T * > ;
(2)
template < class T >
struct difference_type < const T > : difference_type < std:: decay_t < T >> { } ;
(3)
template < class T >

requires requires { typename T :: difference_type ; }

struct difference_type < T > ;
(4)
template < class T >

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

struct difference_type < T > ;
(5)

Berechnet den zugehörigen Differenztyp des Typs I , falls vorhanden. Benutzer können difference_type für einen programmdefinierten Typ spezialisieren.

1) Primäres Template ist eine leere Struktur.
2) Spezialisierung für Zeiger. Wenn T ein Objekttyp ist, stellt es einen Member-Typ type bereit, der gleich std::ptrdiff_t ist. Andernfalls gibt es kein Member type .
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 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 type bereit, der gleich std:: make_signed_t < decltype ( std:: declval < T > ( ) - std:: declval < T > ( ) ) > ist.

Hilfs-Alias-Template

template < class T >
using difference_type_t = typename ranges :: difference_type < T > :: type ;
(ranges TS)

Beispiel

Siehe auch

spezifiziert, dass ein Semiregular Typ mit Prä- und Post-Inkrementoperatoren inkrementiert werden kann
(Konzept)
Kompatibilitäts-Merkmalsklasse, die die assoziierten Typen eines Iterators sammelt
(Alias-Template)