Namespaces
Variants

std::experimental::ranges:: difference_type

From cppreference.net
Определено в заголовочном файле <experimental/ranges/iterator>
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)

Вычисляет соответствующий тип разности для типа I , если таковой имеется. Пользователи могут специализировать difference_type для программно-определенного типа.

1) Первичный шаблон представляет собой пустую структуру.
2) Специализация для указателей. Если T является объектным типом, предоставляет член типа type равный std::ptrdiff_t . В противном случае, член type отсутствует.
3) Специализация для типов с квалификатором const.
4) Специализация для типов, определяющих открытый и доступный тип-член difference_type . Предоставляет тип-член type , равный T::difference_type .
5) Специализация для типов, которые не определяют открытый и доступный тип-член difference_type , но поддерживают вычитание. Предоставляет тип-член type , равный std:: make_signed_t < decltype ( std:: declval < T > ( ) - std:: declval < T > ( ) ) > .

Вспомогательный псевдоним шаблона

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

Пример

Смотрите также

определяет, что Semiregular тип может быть инкрементирован с помощью пре- и постинкрементных операторов
(концепт)
класс характеристик совместимости, который собирает ассоциированные типы итератора
(псевдоним шаблона)