Namespaces
Variants

std:: sentinel_for

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Определено в заголовочном файле <iterator>
template < class S, class I >

concept sentinel_for =
std:: semiregular < S > &&
std:: input_or_output_iterator < I > &&

__WeaklyEqualityComparableWith < S, I > ;
(since C++20)

Концепт sentinel_for определяет отношение между типом input_or_output_iterator и semiregular типом, значения которого обозначают диапазон. Экспозиционный концепт __WeaklyEqualityComparableWith описан в equality_comparable .

Семантические требования

Пусть s и i являются значениями типов S и I соответственно, такие что [ i , s ) обозначает диапазон . sentinel_for<S, I> моделируется только если:

  • i == s является корректно определённым.
  • Если bool ( i ! = s ) , тогда i является разыменуемым и [ ++ i , s ) обозначает диапазон.
  • std:: assignable_from < I & , S > либо моделируется, либо не удовлетворяется.

Область действия == может изменяться со временем. Для итератора i и ограничителя s таких, что [ i , s ) обозначает диапазон и i ! = s , [ i , s ) не обязана продолжать обозначать диапазон после инкрементирования любого итератора, равного i (и поэтому i == s больше не обязано быть корректно определённым после такого инкрементирования).

Примечания

Сторожевой тип и соответствующий ему тип итератора не обязаны моделировать equality_comparable_with , поскольку сторожевой тип может быть не сравнимым с самим собой, и они не обязаны иметь общий ссылочный тип.

Использование сторожевого типа, отличного от типа итератора, в range-based for loop разрешено начиная с C++17.

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 3453 C++20 semantic requirements for sentinel_for were too loose for ranges::advance strengthened