#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;
}