Почему возвращается тип std::count a ptrdiff_t?
Поскольку счетчик никогда не может быть отрицательным, не является size_t технически правильным выбором? И что, если счетчик превышает диапазон ptrdiff_t, так как теоретический возможный размер массива может быть size_t?
EDIT: До сих пор нет подходящего ответа, почему функция возвращает ptrdiff_t. Некоторое объяснение, полученное из приведенных ниже ответов, состоит в том, что тип возврата iterator_traits<InputIterator>::difference_type является общим и может быть любым. До этого момента это имеет смысл. Бывают случаи, когда счетчик может превышать size_t. Однако по-прежнему не имеет смысла, почему тип возврата typedef ptrdiff_t iterator_traits<InputIterator>::difference_type для стандартных итераторов вместо typedef size_t iterator_traits<InputIterator>::difference_type.