template print_value(type T, char* name){ void id(concat_constexpr("print_", name)) (T value){ switch(reflect(T)){ case reflect(int): printf("%d\n", value); break; case reflect(float): printf("%f\n", value); break; default: if(reflect(T).ispointer) printf("%p\n", value); break; } } } print_value(int, "int"); int main(){ print_int(123); }