Outros mencionaram a solução usando std::is_same
e decltype
.
Agora, para generalizar a comparação para um número arbitrário de assinaturas de funções, você pode fazer o seguinte
#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>...>;
e compare tantas funções quanto uma
areSameFunctions<decltype(funA), decltype(funB), decltype(funC)>
( Veja demonstração ao vivo )
Ou, para menos digitação (ou seja, sem decltype
), faça isso como uma função
template<typename Func, typename... Funcs>
constexpr bool areSameFunctions(Func&&, Funcs&&...)
{
return std::conjunction_v<std::is_same<Func, Funcs>...>;
}
e ligue simplesmente
areSameFunctions(funA, funB, funC)
( Veja demonstração ao vivo )