[special.mem.concepts] (original) (raw)
26 Algorithms library [algorithms]
26.11 Specialized algorithms [specialized.algorithms]
26.11.2 Special memory concepts [special.mem.concepts]
Some algorithms in this subclause are constrained with the following exposition-only concepts:
template<class I> concept [_nothrow-input-iterator_](#concept:nothrow-input-iterator "26.11.2 Special memory concepts [special.mem.concepts]") = // _exposition only_ [input_iterator](iterator.concept.input#concept:input%5Fiterator "24.3.4.9 Concept input_iterator [iterator.concept.input]")<I> && is_lvalue_reference_v<iter_reference_t<I>> && [same_as](concept.same#concept:same%5Fas "18.4.2 Concept same_as [concept.same]")<remove_cvref_t<iter_reference_t<I>>, iter_value_t<I>>;
A type I models nothrow-input-iterator only if no exceptions are thrown from increment, copy construction, move construction, copy assignment, move assignment, or indirection through valid iterators.
template<class S, class I> concept [_nothrow-sentinel-for_](#concept:nothrow-sentinel-for "26.11.2 Special memory concepts [special.mem.concepts]") = [sentinel_for](iterator.concept.sentinel#concept:sentinel%5Ffor "24.3.4.7 Concept sentinel_for [iterator.concept.sentinel]")<S, I>; // _exposition only_
Types S and I model nothrow-sentinel-foronly if no exceptions are thrown from copy construction, move construction, copy assignment, move assignment, or comparisons between valid values of type I and S.
template<class R> concept [_nothrow-input-range_](#concept:nothrow-input-range "26.11.2 Special memory concepts [special.mem.concepts]") = // _exposition only_ [range](range.range#concept:range "25.4.2 Ranges [range.range]")<R> && [_nothrow-input-iterator_](#concept:nothrow-input-iterator "26.11.2 Special memory concepts [special.mem.concepts]")<iterator_t<R>> && [_nothrow-sentinel-for_](#concept:nothrow-sentinel-for "26.11.2 Special memory concepts [special.mem.concepts]")<sentinel_t<R>, iterator_t<R>>;
A type R models nothrow-input-range only if no exceptions are thrown from calls to ranges::begin andranges::end on an object of type R.
template<class R> concept [_nothrow-forward-range_](#concept:nothrow-forward-range "26.11.2 Special memory concepts [special.mem.concepts]") = // _exposition only_ [_nothrow-input-range_](#concept:nothrow-input-range "26.11.2 Special memory concepts [special.mem.concepts]")<R> && [_nothrow-forward-iterator_](#concept:nothrow-forward-iterator "26.11.2 Special memory concepts [special.mem.concepts]")<iterator_t<R>>;