#include <iostream>
#include <type_traits>

template <typename T>
typename std::enable_if<std::is_integral<T>::value && std::is_signed<T>::value,
                        int>::type f()
{
    std::cout << "signed\n";
    return 42;
}

template <typename T>
typename std::enable_if<std::is_integral<T>::value && !std::is_signed<T>::value,
                        unsigned>::type f()
{
    std::cout << "unsigned\n";
    return 42;
}


int main() {
	f<int>();
	f<unsigned int>();
}