no-throw-input-iterator, no-throw-forward-iterator, no-throw-sentinel-for, no-throw-input-range, no-throw-forward-range
Материал из cppreference.com
<tbody>
</tbody>
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 требует, чтобы разыменование итератора давало левостороннее значение, например 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 не генерируется исключение.Примечание
Эти концепты позволяют некоторым операциям с итераторами и ограничителями генерировать исключения, например операциям с недопустимыми значениями.
Смотрите также
(C++20) |
указывает, что тип является итератором ввода, то есть значения, на которые он ссылается, могут быть прочитаны, и он может быть как пре-инкрементирован, так и пост-инкрементирован (концепт) |
(C++20) |
указывает, что input_iterator является прямым итератором, поддерживающим сравнение на равенство и многопроходность (концепт) |
(C++20) |
указывает, что тип является ограничителем для типа input_or_output_iterator (концепт) |
(C++20) |
указывает диапазон, тип итератора которого соответствует input_iterator (концепт) |
(C++20) |
указывает диапазон, тип итератора которого соответствует forward_iterator (концепт) |