Gemäß 20.8.5 §1 ist std::less
eine Klassenvorlage mit einer Memberfunktion:
template
struct less
{
bool operator()(const T& x, const T& y) const;
// ...
};
Dies bedeutet, dass ich den Typ angeben muss, wenn ich die Vorlage instanziiere, zum Beispiel std::less
. Warum ist std::less
nicht einfach eine normale Klasse mit einer Memberfunktionenvorlage?
struct less
{
template
bool operator()(const T& x, const U& y) const;
// ...
};
Dann könnte ich einfach std::less
an einen Algorithmus übergeben, ohne das Typargument angeben zu müssen, was kompliziert werden kann.
Ist das nur aus historischen Gründen so, weil frühe Compiler angeblich Memberfunktionsvorlagen nicht sehr gut (oder möglicherweise überhaupt nicht) unterstützten, oder steckt etwas Tiefergehendes dahinter?