If your array contains raw pointers, they will be automatically dereferenced during heapification. Therefore, your predicate will be passed references rather than pointers. The auto-dereferencing behavior does not occur with smart pointers.