Namespaces
Variants

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

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(Примечание: В данном фрагменте HTML отсутствует текстовое содержимое для перевода - присутствуют только HTML-теги и атрибуты, которые согласно инструкциям не подлежат переводу)
template < class I >

концепция 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 >

концепт 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 >

концепт 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 .

Примечания

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

Смотрите также

определяет, что тип является итератором ввода, то есть его ссылочные значения могут быть прочитаны и он может быть как пре-, так и постинкрементирован
(concept)
определяет, что input_iterator является прямым итератором, поддерживающим сравнение на равенство и многопроходность
(concept)
определяет, что тип является стражем для типа input_or_output_iterator
(concept)
определяет диапазон, тип итератора которого удовлетворяет input_iterator
(concept)
определяет диапазон, тип итератора которого удовлетворяет forward_iterator
(concept)