#include <iostream>
#include <type_traits>

struct T {
    enum { signed_t,unsigned_t } m_type;
    template <typename Signed,
              std::enable_if_t<std::is_signed<Signed>::value, bool> = true
    >
    T(Signed) : m_type(signed_t) {}

    template <typename Unsigned,
              std::enable_if_t<std::is_unsigned<Unsigned>::value, bool> = true
    >
    T(Unsigned) : m_type(unsigned_t) {}
};


int main()
{
	std::cout << T(5).m_type << '\n' << T(5u).m_type << '\n';
}