#include <iostream>
using namespace std;
template <class T>
class Some {
public:
Some(T* other) : ptr(other) { }
template <typename R>
Some(const Some<R>& other) {
ptr = dynamic_cast<T*>(other.ptr);
}
T* operator->() const { return ptr; }
public:
T* ptr;
};
class SGObject {
public:
bool equals(Some<SGObject> other) {
}
};
class Subclass : public SGObject {
public:
};
class OtherSubclass : public SGObject {
public:
};
int main() {
Some<Subclass> one(new Subclass);
Some<OtherSubclass> two(new OtherSubclass);
return one->equals(two);
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFNvbWUgewpwdWJsaWM6CglTb21lKFQqIG90aGVyKSA6IHB0cihvdGhlcikgeyB9IAoJCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KCVNvbWUoY29uc3QgU29tZTxSPiYgb3RoZXIpIHsKCQlwdHIgPSBkeW5hbWljX2Nhc3Q8VCo+KG90aGVyLnB0cik7Cgl9CgkKCVQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBwdHI7IH0KCnB1YmxpYzoKCVQqIHB0cjsKfTsKCmNsYXNzIFNHT2JqZWN0IHsKcHVibGljOgoJYm9vbCBlcXVhbHMoU29tZTxTR09iamVjdD4gb3RoZXIpIHsKCQkKCX0KfTsKCmNsYXNzIFN1YmNsYXNzIDogcHVibGljIFNHT2JqZWN0IHsKcHVibGljOgp9OwpjbGFzcyBPdGhlclN1YmNsYXNzIDogcHVibGljIFNHT2JqZWN0IHsKcHVibGljOgp9OwoKaW50IG1haW4oKSB7CglTb21lPFN1YmNsYXNzPiBvbmUobmV3IFN1YmNsYXNzKTsKCVNvbWU8T3RoZXJTdWJjbGFzcz4gdHdvKG5ldyBPdGhlclN1YmNsYXNzKTsKCXJldHVybiBvbmUtPmVxdWFscyh0d28pOwoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=