Как указывало @HolyBlackCat, указатель на нормальную функцию должен работать, поскольку у вас есть простая шаблонная функция void, параметр шаблона которой не действует как для типов возврата, так и для типов аргументов.
template <typename T>
void someVoidFunction() {}
using fPtrType = void(*)();
int main()
{
fPtrType funPtr1 = &someVoidFunction<int>;
fPtrType funPtr2 = &someVoidFunction<float>;
fPtrType funPtr3 = &someVoidFunction<std::string>;
return 0;
}
Если это былВ этом случае параметры шаблона зависят от функции arg и возвращаемых типов, которые вы должны были создать для каждого вида указателя функции.
template <typename T, typename U>
T someFunction(U u) {}
template <typename T, typename U>
using fPtrType = T(*)(U);
int main()
{
fPtrType<int, float> funPtr1 = &someFunction<int, float>; // instance 1
fPtrType<float, float> funPtr2 = &someFunction<float, float>; // instance 2
return 0;
}