std::incrementable_traits

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
流迭代器
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
在标头 <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) 初等模板是空 struct 。
2) 对指针的特化。提供等于 std::ptrdiff_t 的成员类型 difference_type
3) 对 const 限定类型的特化。
4) 对定义公开可访问成员类型 difference_type 的类型的特化。提供等于 T::difference_type 的成员类型 difference_type
5) 对不定义公开可访问成员类型 difference_type 但支持减法的类型的特化。提供等于 std::make_signed_t<decltype(std::declval<T>() - std::declval<T>())> 的成员类型 difference_type 。隐式表达式变种规则(见后述)应用于表达式 a - b

隐式表达式变种

使用不修改某 const 左值运算数的表达式的 requires 表达式亦隐式要求该表达式的额外变种对给定运算数接受非 const 左值或(可为 const 的)右值,除非以有区别的语义显式要求这种表达式变种。这些隐式表达式变种必须符合与声明的表达式的相同的语义。不指定实现以何种程度校验变种的语法。

示例

参阅

指定 semiregular 类型能以前后自增运算符自增
(概念)
计算迭代器的关联类型
(别名模板)
为迭代器各项性质提供统一接口
(类模板)