#include <iostream>
#include <vector>
using namespace std;
#define GC_GENERATE_IS_HAS_TYPEDEF(_arg_type)\
template<class T>\
class is_has_typedef_##_arg_type{\
struct detection{};\
static detection\
detect(...);\
template<class Y>\
static typename Y::##_arg_type\
detect(const Y &);\
public:\
static constexpr bool value = !std::is_same<detection, decltype(detect(std::declval<T>()))>::value;\
};\
template<class T>\
constexpr bool is_has_typedef_##_arg_type##_v = is_has_typedef_##_arg_type<T>::value;
GC_GENERATE_IS_HAS_TYPEDEF( value_type) ;
int main( ) {
// your code goes here
std:: cout << is_has_typedef_value_type_v< std:: vector < int >> << ' ' << is_has_typedef_value_type_v< int > ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBHQ19HRU5FUkFURV9JU19IQVNfVFlQRURFRihfYXJnX3R5cGUpXAoJdGVtcGxhdGU8Y2xhc3MgVD5cCgljbGFzcyBpc19oYXNfdHlwZWRlZl8jI19hcmdfdHlwZXtcCgkJc3RydWN0IGRldGVjdGlvbnt9O1wKCQlzdGF0aWMgZGV0ZWN0aW9uXAoJCQlkZXRlY3QoLi4uKTtcCgkJdGVtcGxhdGU8Y2xhc3MgWT5cCgkJc3RhdGljIHR5cGVuYW1lIFk6OiMjX2FyZ190eXBlXAoJCQlkZXRlY3QoY29uc3QgWSAmKTtcCglwdWJsaWM6XAoJCXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9ICFzdGQ6OmlzX3NhbWU8ZGV0ZWN0aW9uLCBkZWNsdHlwZShkZXRlY3Qoc3RkOjpkZWNsdmFsPFQ+KCkpKT46OnZhbHVlO1wKCX07XAoJdGVtcGxhdGU8Y2xhc3MgVD5cCgljb25zdGV4cHIgYm9vbCBpc19oYXNfdHlwZWRlZl8jI19hcmdfdHlwZSMjX3YgPSBpc19oYXNfdHlwZWRlZl8jI19hcmdfdHlwZTxUPjo6dmFsdWU7CgpHQ19HRU5FUkFURV9JU19IQVNfVFlQRURFRih2YWx1ZV90eXBlKTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJc3RkOjpjb3V0IDw8IGlzX2hhc190eXBlZGVmX3ZhbHVlX3R5cGVfdjxzdGQ6OnZlY3RvcjxpbnQ+PiA8PCAnICcgPDwgaXNfaGFzX3R5cGVkZWZfdmFsdWVfdHlwZV92PGludD47CglyZXR1cm4gMDsKfQ==