/Engine/Source/Runtime/Core/Public/Containers/Array.h
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.
template<class PREDICATE_CLASS> void HeapRemoveAt ( [SizeType](API\Runtime\Core\Containers\TArray\SizeType) Index, const PREDICATE_CLASS & Predicate, bool bAllowShrinking )