#include <memory>
template<typename T>
class object
{
public:
typedef T class_type;
};
class example : public object<example> {};
class upgraded_example : example, public object<upgraded_example> {};
int main(void)
{
example::object<example>::class_type a;
upgraded_example::object<upgraded_example>::class_type b;
object<example>::class_type A;
object<upgraded_example>::class_type B;
return 0;
}
I2luY2x1ZGUgPG1lbW9yeT4KIAogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIG9iamVjdAp7CnB1YmxpYzoKICB0eXBlZGVmIFQgY2xhc3NfdHlwZTsKfTsKIApjbGFzcyBleGFtcGxlIDogcHVibGljIG9iamVjdDxleGFtcGxlPiB7fTsKY2xhc3MgdXBncmFkZWRfZXhhbXBsZSA6IGV4YW1wbGUsIHB1YmxpYyBvYmplY3Q8dXBncmFkZWRfZXhhbXBsZT4ge307CiAKIAppbnQgbWFpbih2b2lkKQp7CiAgZXhhbXBsZTo6b2JqZWN0PGV4YW1wbGU+OjpjbGFzc190eXBlIGE7CiAgdXBncmFkZWRfZXhhbXBsZTo6b2JqZWN0PHVwZ3JhZGVkX2V4YW1wbGU+OjpjbGFzc190eXBlIGI7CiAgb2JqZWN0PGV4YW1wbGU+OjpjbGFzc190eXBlIEE7CiAgb2JqZWN0PHVwZ3JhZGVkX2V4YW1wbGU+OjpjbGFzc190eXBlIEI7CiAKICByZXR1cm4gMDsKfQ==