Spec-Zone.ru › C++

no-throw-input-iterator, no-throw-forward-iterator, no-throw-sentinel-for, no-throw-input-range, no-throw-forward-range

template< class I >
concept no-throw-input-iterator =
    std::input_iterator<I> &&
    std::is_lvalue_reference_v<std::iter_reference_t<I>> &&
    std::same_as<std::remove_cvref_t<std::iter_reference_t<I>>, std::iter_value_t<I>>;
(1) (только для примера*)
template< class I >
concept no-throw-forward-iterator =
    no-throw-input-iterator<I> &&
    std::forward_iterator<I> &&
    no-throw-sentinel-for<I, I>;
(2) (только для примера*)
template< class S, class I >
concept no-throw-sentinel-for = std::sentinel_for<S, I>;
(3) (только для примера*)
template< class R >
concept no-throw-input-range =
    ranges::range<R> &&
    no-throw-input-iterator<ranges::iterator_t<R>> &&
    no-throw-sentinel-for<ranges::sentinel_t<R>, ranges::iterator_t<R>>;
(4) (только для примера*)
template< class R >
concept no-throw-forward-range =
    no-throw-input-range<R> &&
    no-throw-forward-iterator<ranges::iterator_t<R>>;
(5) (только для примера*)

Эти концепции (только для примера) указывают, что при операциях, необходимых алгоритмам над итераторами, стоп-значениями и диапазонами, не возникает исключений.

1) Концепция no-throw-input-iterator требует, чтобы обращение к итератору возвращало lvalue, как contiguous_iterator и LegacyForwardIterator.

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

Как и все стандартные концепции, каждая из перечисленных здесь концепций моделируется только если моделируются все концепции, которые она включает.

1) Тип I моделирует no-throw-input-iterator только если при инкременте, копировании, перемещении, присваивании или обращении к значениям через корректные итераторы не возникает исключений.
3) Типы S и I моделируют no-throw-sentinel-for только если при копировании, перемещении, присваивании или сравнении допустимых значений типа I и S не возникает исключений.
4) Тип R моделирует no-throw-input-range только если при вызове ranges::begin и ranges::end для объекта типа R не возникает исключений.

Примечания

Эти концепции позволяют некоторым операциям с итераторами и стоп-значениями выбрасывать исключения, например, при работе с недопустимыми значениями.

См. также

input_iterator
(C++20)
определяет, что тип является входным итератором, т.е. значения, к которым он обращается, могут быть прочитаны, а он может быть инкрементирован как префиксным, так и постфиксным способом
(концепция)
forward_iterator
(C++20)
определяет, что input_iterator является итератором с однонаправленным продвижением, поддерживая сравнение по равенству и возможность многократного прохода
(концепция)
sentinel_for
(C++20)
определяет, что тип является стоп-значением для типа input_or_output_iterator
(концепция)
ranges::input_range
(C++20)
определяет диапазон, чей тип итератора удовлетворяет input_iterator
(концепция)
ranges::forward_range
(C++20)
определяет диапазон, чей тип итератора удовлетворяет forward_iterator
(концепция)

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

Spec-Zone.ru

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