#include <iostream>
#include <type_traits>

template<typename T>
void f();

template<>
void f<int>() {
	std::cout << "int\n";
}
template<>
void f<unsigned>() {
	std::cout << "unsigned\n";
}
template<>
void f<long>() {
	std::cout << "long\n";
}

int main() {
	f<int>();
	f<unsigned>();
	f<long>();
	f<std::common_type<int, unsigned>::type>();
}
