How to compare the signature of two functions?

You can check the function type with decltype and std::is_same. e.g.

std::is_same_v<decltype(funA), decltype(funB)>  // true

LIVE


Others have mentioned the solution using std::is_same and decltype.

Now to generalize the comparison for an arbitrary number of function signatures, you can do the following

#include <type_traits> // std::is_same, std::conjunction_v

template<typename Func, typename... Funcs>
constexpr bool areSameFunctions = std::conjunction_v<std::is_same<Func, Funcs>...>;

and compare as many functions as one like

areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>

(See Live Demo)


Or for less typing (i.e. without decltype), make it as a function

template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
   return std::conjunction_v<std::is_same<Func, Funcs>...>;
}

and call simply by

areSameFunctions(funA, funB, funC) 

(See Live Demo)


As another possibility that hasn't been mentioned: you can use typeid from typeinfo and ==:

#include <typeinfo>

if(typeid(funA) != typeid(funB))
    std::cerr << "Types not the same" << std::endl;

Essentially you want to check if types of two functions are the same:

std::is_same_v<decltype(funA), decltype(funB)>

I wouldn't call this 'comparing signatures', as, if I remember correctly, return type is not a part of a signature (because it doesn't affect overload resolution).