25 Algorithms library [algorithms]

25.11 Specialized <memory> algorithms [specialized.algorithms]

25.11.1 Special memory concepts [special.mem.concepts]

Some algorithms in this subclause are constrained with the following exposition-only concepts:
template<class I> concept no-throw-input-iterator = // exposition only input_iterator<I> && is_lvalue_reference_v<iter_reference_t<I>> && same_as<remove_cvref_t<iter_reference_t<I>>, iter_value_t<I>>;
A type I models 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.
[Note
:
This concept allows some input_­iterator ([iterator.concept.input]) operations to throw exceptions.
— end note
]
template<class S, class I> concept no-throw-sentinel = sentinel_for<S, I>; // exposition only
Types S and I model no-throw-sentinel only if no exceptions are thrown from copy construction, move construction, copy assignment, move assignment, or comparisons between valid values of type I and S.
[Note
:
This concept allows some sentinel_­for ([iterator.concept.sentinel]) operations to throw exceptions.
— end note
]
template<class R> concept no-throw-input-range = // exposition only range<R> && no-throw-input-iterator<iterator_t<R>> && no-throw-sentinel<sentinel_t<R>, iterator_t<R>>;
A type R models no-throw-input-range only if no exceptions are thrown from calls to ranges​::​begin and ranges​::​end on an object of type R.
template<class I> concept no-throw-forward-iterator = // exposition only no-throw-input-iterator<I> && forward_iterator<I> && no-throw-sentinel<I, I>;
[Note
:
This concept allows some forward_­iterator ([iterator.concept.forward]) operations to throw exceptions.
— end note
]
template<class R> concept no-throw-forward-range = // exposition only no-throw-input-range<R> && no-throw-forward-iterator<iterator_t<R>>;