std:: sized_sentinel_for, std:: disable_sized_sentinel_for
|
Определено в заголовочном файле
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sized_sentinel_for
=
|
(1) | (начиная с C++20) |
|
template
<
class
S,
class
I
>
inline constexpr bool disable_sized_sentinel_for = false ; |
(2) | (начиная с C++20) |
sized_sentinel_for
определяет, что объект типа итератора
I
и объект типа сентинела
S
могут быть вычитаны для вычисления расстояния между ними за постоянное время.
disable_sized_sentinel_for
может использоваться для предотвращения удовлетворения итераторами и сторожевыми значениями, которые можно вычитать, но фактически не моделируют
sized_sentinel_for
, требования концепта.
disable_sized_sentinel_for
для cv-неквалифицированного не-массивного объектного типа
S
и
I
, при условии что хотя бы один из них является
программо-определённым типом
. Такие специализации могут использоваться в
константных выражениях
и имеют тип
const
bool
.
Содержание |
Семантические требования
Пусть
i
будет итератором типа
I
, а
s
- cентинелом типа
S
, таких что
[
i
,
s
)
обозначает диапазон. Пусть
n
будет наименьшим количеством применений
++
i
, необходимых для того, чтобы
bool
(
i
==
s
)
стало
true
.
I
и
S
моделируют
sized_sentinel_for<S, I>
только если выполняются все следующие условия:
- Если n представимо в виде std:: iter_difference_t < I > , тогда s - i корректно определено и равно n .
- Если - n представимо в виде std:: iter_difference_t < I > , тогда i - s корректно определено и равно - n .
Сохранение равенства
Выражения, объявленные в requires выражениях концепций стандартной библиотеки, должны быть equality-preserving (если не указано иное).
Вариации неявных выражений
Выражение requires expression , использующее выражение, которое является немодифицирующим для некоторого константного lvalue операнда, также требует неявных вариаций выражений .
Смотрите также
|
(C++20)
|
определяет, что диапазон знает свой размер за постоянное время
(концепт) |
|
(C++20)
|
возвращает целое число, равное размеру диапазона
(объект точки кастомизации) |