Согласно 20.8.5 §1, std::less
является шаблоном класса с функцией-членом:
template<typename T>
struct less
{
bool operator()(const T& x, const T& y) const;
// ...
};
Это означает, что я должен упомянуть тип при создании экземпляра шаблона, например std::less<int>
. Почему нет std::less
нормального класса с шаблоном функции-члена вместо?
struct less
{
template<typename T, typename U>
bool operator()(const T& x, const U& y) const;
// ...
};
Тогда я мог просто передать std::less
алгоритму без аргумента типа, который может стать волосатым.
Это просто по историческим причинам, потому что ранние компиляторы (предположительно) не поддерживали шаблоны функций-членов очень хорошо (или, может быть, даже вообще), или есть что-то более глубокое для него?