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, поскольку тип сентинела может быть несравним с самим собой, и от них не требуется иметь общий тип ссылки.

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

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам 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/cpp/iterator/sentinel_for

Spec-Zone.ru

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