В С++ вопрос совместимости типов функций и методов решается написанием оберток-функкторов вокруг указателей. У меня в книжке по ООП есть раздел "Как написать обобщенный алгоритм", где я достаточно подробно этот вопрос обсуждаю. Интересно, как это решить в КП?
Кстати, в stlном списке сортировка тоже собственная, реализована как метод класса list.