Question:
How can I provide my own predicate for the list::sort method in Visual C++ 5.0? The method appears to require that any function object passed must be derived from greaterstd::binary_function
) that has a non-virtual operator()
method so my operator()
never gets called. Am I missing something?
Answer:
There is no such restriction for the comparison algorithm for sort in STL.As a matter of fact, there is not a single place where STL relies on virtual functions. If your compiler’s implementation casts thecomparator to the base class’ version, that is a serious bugin the implementation.
Here is the definition of list::sort
as perthe draft standards:
templateHere the only restriction on the Compare type is that it must havea publically visible function call operator [>class list{ // other stuff template void sort (Compare comp)};
operator ()()
].