Тип функции известен во время компиляции.Вы можете сравнивать произвольные типы, используя is_same
:
#include <iostream>
#include <type_traits>
int main()
{
typedef void(*F0)(int);
typedef void(*F1)(int, int);
std::cout << std::is_same<F0, F0>::value << std::endl;
std::cout << std::is_same<F0, F1>::value << std::endl;
}
Результат:
1
0
Значение свойства type является константой времени компиляции и может использоваться в экземплярах шаблона и для SFINAE..