А>>>>В MSVC 6.0, к сожалению, можно только специализировать std::greater для своего класса. Предикат передать не получится (если, конечно, не править хедер руками).
peter>Вот он меня нафиг и посылает :no:
peter>Где править header?
Заголовок <list> (измененные/добавленные строки выделены):
//typedef greater<_Ty> _Pr3; // эту закомментировать
template<class _Pr3> // эту добавить
void merge(_Myt& _X, _Pr3 _Pr)
{. . .}
. . .
template<class _Pr3> // эту добавить
void sort(_Pr3 _Pr)
{. . .}
ПК>>Кроме того, для избежания дальнейших сюрпризов при сопровождении кода, вместо специализации std::greater<> лучше определить соответствующую операцию `>' для объектов пользовательского класса.
peter>Как это делается?
Просто определяешь для своего класса операции `<', `>':
class CStudent
{
. . .
};
bool operator <(const CStudent& l, const CStudent& r)
{
. . .
}
bool operator >(const CStudent& l, const CStudent& r)
{
. . .
}
Кстати, если уж определять эти, то стоит определить и остальные: ==, !=, >=, <=.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен