Tomemos std::sort
como std::ranges::sort
exemplo, a classe do iterador std::ranges::sort
é restrita ao conceito std::random_access_iterator
:
template< std::random_access_iterator I, std::sentinel_for<I> S,
class Comp = ranges::less, class Proj = std::identity >
requires std::sortable<I, Comp, Proj>
constexpr I
sort( I first, S last, Comp comp = {}, Proj proj = {} );
Mas std::sort
não é:
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
std::sort
Por que (e todos os algoritmos sem intervalo) não é restrito?
Uma questão relacionada: Qual é a diferença entre std::fill_n e std::ranges::fill_n?