No. It can't work ... you need a function pointer not function.
The 'decltype' is keyword not function and looseness in its argument does
not work.
Following variants must work:
std::priority_queue<int, std::vector<int>, decltype(&f)> pq( &f, vec );
std::priority_queue<int, std::vector<int>, decltype(&f)> pq( **f, vec );
That looseness with function (or on current case constructor) function
pointer arguments is perhaps inherited from C ... I have forgot its history.