#include <iostream>
#include <type_traits>
template<typename T>
constexpr bool is_char_v = std::is_same<T,char>::value || std::is_same<T,wchar_t>::value || std::is_same<T,char16_t>::value || std::is_same<T,char32_t>::value;
template<typename T>
constexpr bool is_arithmetic_not_char = std::is_arithmetic<T>::value && !is_char_v<T>;
template<typename A, typename B, typename std::enable_if<is_arithmetic_not_char<A> && is_arithmetic_not_char<B>, int>::type = 0>
double sum(A a, B b) {
return a + b;
}
template<typename A, typename B, typename std::enable_if<!(is_arithmetic_not_char<A> && is_arithmetic_not_char<B>), int>::type = 0>
double sum(A, B) {
return 0;
}
int main()
{
std::cout << sum(10, 65) << std::endl;
std::cout << sum(10, 'A') << std::endl;
return 0;
}