I was trying to specify an overloaded greater-than operator as a second parameter to an instantiation of a multiset. I was expecting that I could specify MyClass::operator> but the compiler didn't like this. Using greater<MyClass> worked. This looks somewhat like a function template to me but I still don't understand why I had to use that instead of something that looked very much like the overloaded operator definition syntax (MyClass::operator>). Can someone explain to me why I had to use the one and not the other?