In the places where one would expect to pass a
pointer to a function to an algorithmic template, the
interface is specified to accept a function object.
This not only makes
algorithmic templates work with pointers to functions, but also enables them to
work with arbitrary function objects.