#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBHQ19HRU5FUkFURV9JU19IQVNfVFlQRURFRihfYXJnX3R5cGUpXAoJdGVtcGxhdGU8Y2xhc3MgVD5cCgljbGFzcyBpc19oYXNfdHlwZWRlZl8jI19hcmdfdHlwZXtcCgkJc3RydWN0IGRldGVjdGlvbnt9O1wKCQlzdGF0aWMgZGV0ZWN0aW9uXAoJCQlkZXRlY3QoLi4uKTtcCgkJdGVtcGxhdGU8Y2xhc3MgWT5cCgkJc3RhdGljIHR5cGVuYW1lIFk6OiBfYXJnX3R5cGVcCgkJCWRldGVjdChjb25zdCBZICYpO1wKCXB1YmxpYzpcCgkJc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gIXN0ZDo6aXNfc2FtZTxkZXRlY3Rpb24sIGRlY2x0eXBlKGRldGVjdChzdGQ6OmRlY2x2YWw8VD4oKSkpPjo6dmFsdWU7XAoJfTtcCgl0ZW1wbGF0ZTxjbGFzcyBUPlwKCWNvbnN0ZXhwciBib29sIGlzX2hhc190eXBlZGVmXyMjX2FyZ190eXBlIyNfdiA9IGlzX2hhc190eXBlZGVmXyMjX2FyZ190eXBlPFQ+Ojp2YWx1ZTsKCkdDX0dFTkVSQVRFX0lTX0hBU19UWVBFREVGKHZhbHVlX3R5cGUpOwoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglzdGQ6OmNvdXQgPDwgaXNfaGFzX3R5cGVkZWZfdmFsdWVfdHlwZV92PHN0ZDo6dmVjdG9yPGludD4+IDw8ICcgJyA8PCBpc19oYXNfdHlwZWRlZl92YWx1ZV90eXBlX3Y8aW50PjsKCXJldHVybiAwOwp9