Spec-Zone.ru › C++

std::sentinel_for

Определено в заголовке <iterator>
template< class S, class I >
    concept sentinel_for =
        std::semiregular<S> &&
        std::input_or_output_iterator<I> &&
        __WeaklyEqualityComparableWith<S, I>;
(с 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, так как тип стоп-значения может не быть сравнимым с самим собой, и они не обязаны иметь общий тип ссылки.

С C++17 разрешается использовать тип стоп-значения, отличный от типа итератора, в цикле с диапазоном for.

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

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

DR Применено к Поведение как опубликовано Корректное поведение
LWG 3453 C++20 семантические требования для sentinel_for были слишком слабыми для ranges::advance усилены

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/sentinel_for

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API