This is one of those cases where I prefer C++
template <typename Func> using function_ptr = add_pointer_t<Func>;
and now declarations are a bit more sane: void foo(function_ptr<void (int)> callback);