std::incrementable
Определено в заголовке <iterator> | ||
|---|---|---|
template< class I >
concept incrementable =
std::regular<I> &&
std::weakly_incrementable<I> &&
requires(I i) {
{ i++ } -> std::same_as<I>;
};
| (с C++20) |
Этот концепция определяет требования к типам, которые можно инкрементировать с помощью префиксных и постфиксных операторов инкремента, операции инкремента которых являются сохраняющими равенство, а тип является std::equality_comparable.
В отличие от std::weakly_incrementable, которые поддерживают только алгоритмы однопроходного типа, многопроходные однонаправленные алгоритмы могут использоваться с типами, которые моделируют std::incrementable.
Семантические требования
I моделирует std::incrementable только если заданы любые два инкрементируемых объекта a и b типа I:
-
bool(a == b)подразумеваетbool(a++ == b), и -
bool(a == b)подразумеваетbool(((void)a++, a) == ++b).
Сохранение равенства
Выражения, объявленные в выражениях requires концепций стандартной библиотеки, должны быть сохраняющими равенство (кроме случаев, указанных иначе).
См. также
|
(C++20) | определяет, что тип semiregular может быть инкрементирован с помощью префиксных и постфиксных операторов инкремента (концепция) |
|
(C++20) | определяет, что тип идентичен другому типу (концепция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/incrementable