#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';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgpzdHJ1Y3QgVCB7CiAgICBlbnVtIHsgc2lnbmVkX3QsdW5zaWduZWRfdCB9IG1fdHlwZTsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTaWduZWQsCiAgICAgICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NpZ25lZDxTaWduZWQ+Ojp2YWx1ZSwgYm9vbD4gPSB0cnVlCiAgICA+CiAgICBUKFNpZ25lZCkgOiBtX3R5cGUoc2lnbmVkX3QpIHt9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFVuc2lnbmVkLAogICAgICAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc191bnNpZ25lZDxVbnNpZ25lZD46OnZhbHVlLCBib29sPiA9IHRydWUKICAgID4KICAgIFQoVW5zaWduZWQpIDogbV90eXBlKHVuc2lnbmVkX3QpIHt9Cn07CgoKaW50IG1haW4oKQp7CglzdGQ6OmNvdXQgPDwgVCg1KS5tX3R5cGUgPDwgJ1xuJyA8PCBUKDV1KS5tX3R5cGUgPDwgJ1xuJzsKfQ==