template<class I>
concept nothrow-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>>;
template<class S, class I>
concept nothrow-sentinel-for = sentinel_for<S, I>; // exposition only
template<class R>
concept nothrow-input-range = // exposition only
range<R> &&
nothrow-input-iterator<iterator_t<R>> &&
nothrow-sentinel-for<sentinel_t<R>, iterator_t<R>>;
template<class I>
concept nothrow-forward-iterator = // exposition only
nothrow-input-iterator<I> &&
forward_iterator<I> &&
nothrow-sentinel-for<I, I>;
template<class R>
concept nothrow-forward-range = // exposition only
nothrow-input-range<R> &&
nothrow-forward-iterator<iterator_t<R>>;