Spec-Zone.ru › C++

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) Основной шаблон — пустая структура.
2) Специализация для указателей.
Предоставляет тип-член difference_type, совпадающий с std::ptrdiff_t.
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, также требует неявных вариаций выражений.

Пример

См. также

weakly_incrementable
(C++20)
задаёт требования, согласно которым тип semiregular можно инкрементировать операторами префиксного и постфиксного инкремента
(концепт)
iter_value_titer_reference_titer_const_reference_titer_difference_titer_rvalue_reference_titer_common_reference_t
(C++20)(C++20)(C++23)(C++20)(C++20)(C++20)
вычисляет связанные типы итератора
(шаблон псевдонима)
iterator_traits
предоставляет единый интерфейс к свойствам итератора
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/incrementable_traits

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API