#define CHECKABLE_TYPEDEF(Name) \
template <typename T> \
struct HasTypedef_##Name { \
typedef char yes[1]; \
typedef char no[2]; \
template <typename C> static yes& test(typename C::Name*); \
template <typename> static no& test(...); \
static const bool value = sizeof(test<T>(0)) == sizeof(yes);\
};
#define HAS_TYPEDEF(Type, Name) HasTypedef_##Name<Type>::value
I2RlZmluZSBDSEVDS0FCTEVfVFlQRURFRihOYW1lKSBcCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gXAogICAgc3RydWN0IEhhc1R5cGVkZWZfIyNOYW1lIHsgXAogICAgICAgIHR5cGVkZWYgY2hhciB5ZXNbMV07IFwKICAgICAgICB0eXBlZGVmIGNoYXIgbm9bMl07IFwKICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4gc3RhdGljIHllcyYgdGVzdCh0eXBlbmFtZSBDOjpOYW1lKik7IFwKICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWU+IHN0YXRpYyBubyYgdGVzdCguLi4pOyBcCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YodGVzdDxUPigwKSkgPT0gc2l6ZW9mKHllcyk7XAogICAgfTsKCgojZGVmaW5lIEhBU19UWVBFREVGKFR5cGUsIE5hbWUpIEhhc1R5cGVkZWZfIyNOYW1lPFR5cGU+Ojp2YWx1ZQoK