std::incrementable_traits
Определено в заголовке <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) Основной шаблон — пустой структурой.
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, использующее выражение, которое не изменяет некоторые константные lvalue-операнды, также требует неявные варианты выражений.
Пример
См. также
|
(C++20) | определяет, что тип semiregular может быть инкрементирован с помощью префиксного и постфиксного операторов инкремента (концепция) |
|
(C++20)(C++20)(C++23)(C++20)(C++20)(C++20) | вычисляет связанные типы итератора (шаблон псевдонима) |
| предоставляет единый интерфейс к свойствам итератора (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/incrementable_traits