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>>;
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>>;
template<class I>
concept no-throw-forward-iterator = // exposition only
no-throw-input-iterator<I> &&
forward_iterator<I> &&
no-throw-sentinel<I, I>;