| | |
template<class I> struct incrementable_traits{}; | (1) | (since C++20) |
| (2) | (since C++20) |
template<class T>
struct incrementable_traits<const T>
: incrementable_traits<T>{}; | (3) | (since C++20) |
template<class T>
requires requires{typename T::difference_type;}
struct incrementable_traits<T>; | (4) | (since 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) | (since C++20) |
| | |
Computes the associated difference type of the typeI
, if any. A program may specializeincrementable_traits
for aprogram-defined type.
1) Primary template is an empty struct.
2) Specialization for pointers.
3) Specialization for const-qualified types.
4) Specialization for types that define a public and accessible member typedifference_type
.
Provides a member typedifference_type
same asT::difference_type
.
5) Specialization for types that do not define a public and accessible member typedifference_type
but do support subtraction.
[edit]Implicit expression variations
Arequires expression that uses an expression that is non-modifying for some constant lvalue operand also requiresimplicit expression variations.
[edit]Example
| This section is incomplete Reason: no example |
[edit]See also
| specifies that asemiregular type can be incremented with pre- and post-increment operators (concept)[edit] |
(C++20)(C++20)(C++23)(C++20)(C++20)(C++20) | computes the associated types of an iterator (alias template)[edit] |
| provides uniform interface to the properties of an iterator (class template)[edit] |