#include <iostream>
#include <string>
#include <type_traits>
template <typename...>
using void_t = void;
template <typename T, typename = void>
struct has_member_type : std::false_type {};
template <typename T>
struct has_member_type<T, void_t<typename T::type>> : std::true_type {};
struct test
{
using type = int;
};
int main()
{
std::cout << has_member_type<test>::value << std::endl;
std::cout << has_member_type<int>::value << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CnVzaW5nIHZvaWRfdCA9IHZvaWQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB2b2lkPgpzdHJ1Y3QgaGFzX21lbWJlcl90eXBlIDogc3RkOjpmYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBoYXNfbWVtYmVyX3R5cGU8VCwgdm9pZF90PHR5cGVuYW1lIFQ6OnR5cGU+PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwoKc3RydWN0IHRlc3QKewoJdXNpbmcgdHlwZSA9IGludDsKfTsKCmludCBtYWluKCkKewoJc3RkOjpjb3V0IDw8IGhhc19tZW1iZXJfdHlwZTx0ZXN0Pjo6dmFsdWUgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGhhc19tZW1iZXJfdHlwZTxpbnQ+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==