#include <cstdio> #include <type_traits> template <typename T> void checkType(T) { printf("Unknown type\n"); } void checkType(int) { printf("int\n"); } void checkType(double) { printf("double\n"); } template <typename T, typename S> typename std::common_type<T,S>::type max(T a, S b) { return (a>b) ? a : b; } int main() { checkType(max(1, 1.0)); checkType(max(1.0, 1 )); checkType(max(1, 1 )); checkType(max(1.0, 1.0)); } |