std::incrementable_traits
Материал из cppreference.com
| Этот раздел не завершён Причина: tr |
| Определено в заголовочном файле <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) |
Computes the associated difference type of the type I, if any. A program may specialize incrementable_traits for a program-defined type.
1) Primary template is an empty struct.
2) Specialization for pointers.
Provides a member type
difference_type same as std::ptrdiff_t.3) Specialization for const-qualified types.
4) Specialization for types that define a public and accessible member type
difference_type. Provides a member type
difference_type same as T::difference_type.5) Specialization for types that do not define a public and accessible member type
difference_type but do support subtraction. Provides a member type
difference_type same as std::make_signed_t<decltype(std::declval<T>() - std::declval<T>())>. The implicit expression variations rule (see below) applies to the expression a - b.Варианты неявных выражений
Выражение requires, которое использует выражение, которое не модифицирует для некоторого константного операнда lvalue, также неявно требует дополнительных вариаций этого выражения, которые принимают неконстантное lvalue или (возможно, константное) rvalue для данного операнда, если только такое изменение выражения явно требуется с различной семантикой. Эти вариации неявных выражений должны соответствовать тем же семантическим требованиям, что и объявленное выражение. Степень, в которой реализация проверяет синтаксис вариантов, не определена.
Example
| Этот раздел не завершён Причина: нет примера |
See also
(C++20) |
указывает, что тип semiregular может увеличиваться с помощью операторов до и после инкремента (концепт) |
(C++20)(C++20)(C++23)(C++20)(C++20)(C++20) |
вычисляет связанные типы итератора (псевдоним шаблона) |
| предоставляет единый интерфейс к свойствам итератора (шаблон класса) |