Мне просто было интересно, так как вы все равно можете передавать итераторы произвольного доступа в std :: sort
, почему бы не применить это ограничение, определив его только для итераторов произвольного доступа в первую очередь ?
#include <iterator>
#include <type_traits>
template <typename ForwardIterator>
typename std::enable_if<
std::is_same<
typename std::iterator_traits<ForwardIterator>::iterator_category,
std::random_access_iterator_tag>::value,
void>
::type sort(ForwardIterator begin, ForwardIterator end)
{
// ...
}
Я считаю, что однострочное сообщение об ошибке намного легче читать, чем страницы и страницы сообщений об ошибках, возникающих из-за ошибок типа далеко внизу в реализации.
Вы можете сделать то же самое с другими алгоритмами. Стандартный базовый язык C ++ всегда был достаточно выразительным для этой задачи, верно? Итак, какая конкретная причина, почему этого не было сделано?