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/w/cpp/iterator/incrementable_traits

Spec-Zone.ru

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