Spec-Zone.ru › C++

nothrow-input-iterator, nothrow-forward-iterator, nothrow-bidirectional-iterator, no-throw-input-range, nothrow-random-access-iterator

template< class I >
concept /*nothrow-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 /*nothrow-forward-iterator*/ =
    /*nothrow-input-iterator*/<I> &&
    std::forward_iterator<I> &&
    /*nothrow-sentinel-for*/<I, I>;
(2) (только для пояснения*)
template< class I >
concept /*nothrow-bidirectional-iterator*/ =
    /*nothrow-forward-iterator*/<I> &&
    std::bidirectional_iterator<I>;
(3) (начиная с C++26)
(только для пояснения*)
template< class I >
concept /*nothrow-random-access-iterator*/ =
    /*nothrow-bidirectional-iterator*/<I> &&
    std::random_access_iterator<I> &&
    /*nothrow-sized-sentinel-for*/<I, I>;
(4) (начиная с C++26)
(только для пояснения*)

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

Определения /*nothrow-sentinel-for*/ и /*nothrow-sized-sentinel-for*/ см. на этой странице.

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

1) Тип I моделирует nothrow-input-iterator только если при инкрементировании, копирующем конструировании, перемещающем конструировании, копирующем присваивании, перемещающем присваивании или разыменовании корректных итераторов типа I не выбрасываются исключения.
3) Тип I моделирует nothrow-bidirectional-iterator только если при декрементировании корректных итераторов типа I не выбрасываются исключения.
4) Тип I моделирует nothrow-random-access-iterator только если при сравнениях корректных итераторов типа I или при использовании операторов -, +, -=, +=, [] с корректными значениями типа I и std::iter_difference_t<I> не выбрасываются исключения.

Примечания

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

См. также

input_iterator
(C++20)
задаёт, что тип является входным итератором, то есть его разыменованные значения можно читать, а сам он поддерживает пре- и постинкремент
(концепт)
forward_iterator
(C++20)
задаёт, что input_iterator является прямым итератором, поддерживающим сравнение на равенство и многократный проход
(концепт)
bidirectional_iterator
(C++20)
задаёт, что forward_iterator является двунаправленным итератором, поддерживающим перемещение назад
(концепт)
random_access_iterator
(C++20)
задаёт, что bidirectional_iterator является итератором произвольного доступа, поддерживающим перемещение за постоянное время и доступ по индексу
(концепт)

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

Spec-Zone.ru

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