no-throw-input-iterator, no-throw-forward-iterator, no-throw-sentinel-for, no-throw-input-range, no-throw-forward-range (original) (raw)
| 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) | (exposition only*) |
|---|---|---|
| template< class I > concept no-throw-forward-iterator = no-throw-input-iterator<I> && std::forward_iterator<I> && no-throw-sentinel-for<I, I>; | (2) | (exposition only*) |
| template< class S, class I >concept no-throw-sentinel-for = std::sentinel_for<S, I>; | (3) | (exposition only*) |
| 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) | (exposition only*) |
| template< class R > concept no-throw-forward-range = no-throw-input-range<R> && no-throw-forward-iterator<ranges::iterator_t<R>>; | (5) | (exposition only*) |
These exposition-only concepts specify that no exceptions are thrown from operations required by algorithms on iterators, sentinels, and ranges.
[edit] Semantic requirements
Like all standard concepts, every concept listed here is modeled only if all concepts it subsumes are modeled.
A type
Imodels_no-throw-input-iterator_only if no exceptions are thrown from increment, copy construction, move construction, copy assignment, move assignment, or indirection through valid iterators.Types
SandImodel_no-throw-sentinel-for_only if no exceptions are thrown from copy construction, move construction, copy assignment, move assignment, or comparisons between valid values of typeIandS.A type
Rmodels_no-throw-input-range_only if no exceptions are thrown from calls to ranges::begin and ranges::end on an object of typeR.
[edit] Notes
These concepts allow some operations on iterators and sentinels to throw exceptions, e.g. operations on invalid values.