#include <iostream>
#include <memory>
using namespace std;
class BaseClass {
};
class DerivedClass : public BaseClass {
};
int main() {
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
std::shared_ptr<DerivedClass> derived = make_shared<DerivedClass>();
bool baseIsAnInstanceOfBaseClass = (dynamic_pointer_cast<BaseClass>(base) != NULL);
bool baseIsAnInstanceOfDerivedClass = (dynamic_pointer_cast<DerivedClass>(base) != NULL);
bool derivedIsAnInstanceOfBaseClass = (dynamic_pointer_cast<BaseClass>(derived) != NULL);
bool derivedIsAnInstanceOfDerivedClass = (dynamic_pointer_cast<DerivedClass>(derived) != NULL);
cout << "base is an instance of BaseClass = " << baseIsAnInstanceOfBaseClass ? "true" : "false" << endl;
cout << "base is an instance of DerivedClass = " << baseIsAnInstanceOfDerivedClass ? "true" : "false" << endl;
cout << "derived is an instance of BaseClass = " << derivedIsAnInstanceOfBaseClass ? "true" : "false" << endl;
cout << "derived is an instance of DerivedClass = " << derivedIsAnInstanceOfDerivedClass ? "true" : "false" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQmFzZUNsYXNzIHsKfTsKCmNsYXNzIERlcml2ZWRDbGFzcyA6IHB1YmxpYyBCYXNlQ2xhc3Mgewp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnNoYXJlZF9wdHI8QmFzZUNsYXNzPiBiYXNlID0gbWFrZV9zaGFyZWQ8QmFzZUNsYXNzPigpOwoJc3RkOjpzaGFyZWRfcHRyPERlcml2ZWRDbGFzcz4gZGVyaXZlZCA9IG1ha2Vfc2hhcmVkPERlcml2ZWRDbGFzcz4oKTsKCQoJYm9vbCBiYXNlSXNBbkluc3RhbmNlT2ZCYXNlQ2xhc3MgPSAoZHluYW1pY19wb2ludGVyX2Nhc3Q8QmFzZUNsYXNzPihiYXNlKSAhPSBOVUxMKTsKCWJvb2wgYmFzZUlzQW5JbnN0YW5jZU9mRGVyaXZlZENsYXNzID0gKGR5bmFtaWNfcG9pbnRlcl9jYXN0PERlcml2ZWRDbGFzcz4oYmFzZSkgIT0gTlVMTCk7Cglib29sIGRlcml2ZWRJc0FuSW5zdGFuY2VPZkJhc2VDbGFzcyA9IChkeW5hbWljX3BvaW50ZXJfY2FzdDxCYXNlQ2xhc3M+KGRlcml2ZWQpICE9IE5VTEwpOwoJYm9vbCBkZXJpdmVkSXNBbkluc3RhbmNlT2ZEZXJpdmVkQ2xhc3MgPSAoZHluYW1pY19wb2ludGVyX2Nhc3Q8RGVyaXZlZENsYXNzPihkZXJpdmVkKSAhPSBOVUxMKTsKCQoJY291dCA8PCAiYmFzZSBpcyBhbiBpbnN0YW5jZSBvZiBCYXNlQ2xhc3MgPSAiIDw8IGJhc2VJc0FuSW5zdGFuY2VPZkJhc2VDbGFzcyA/ICJ0cnVlIiA6ICJmYWxzZSIgPDwgZW5kbDsKCWNvdXQgPDwgImJhc2UgaXMgYW4gaW5zdGFuY2Ugb2YgRGVyaXZlZENsYXNzID0gIiA8PCBiYXNlSXNBbkluc3RhbmNlT2ZEZXJpdmVkQ2xhc3MgPyAidHJ1ZSIgOiAiZmFsc2UiIDw8IGVuZGw7Cgljb3V0IDw8ICJkZXJpdmVkIGlzIGFuIGluc3RhbmNlIG9mIEJhc2VDbGFzcyA9ICIgPDwgZGVyaXZlZElzQW5JbnN0YW5jZU9mQmFzZUNsYXNzID8gInRydWUiIDogImZhbHNlIiA8PCBlbmRsOwoJY291dCA8PCAiZGVyaXZlZCBpcyBhbiBpbnN0YW5jZSBvZiBEZXJpdmVkQ2xhc3MgPSAiIDw8IGRlcml2ZWRJc0FuSW5zdGFuY2VPZkRlcml2ZWRDbGFzcyA/ICJ0cnVlIiA6ICJmYWxzZSIgPDwgZW5kbDsKCgoJcmV0dXJuIDA7Cn0=
prog.cpp: In function 'int main()':
prog.cpp:12:2: error: 'shared_ptr' is not a member of 'std'
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
^
prog.cpp:12:27: error: expected primary-expression before '>' token
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
^
prog.cpp:12:29: error: 'base' was not declared in this scope
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
^
prog.cpp:12:36: error: 'make_shared' was not declared in this scope
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
^
prog.cpp:12:57: error: expected primary-expression before '>' token
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
^
prog.cpp:12:59: error: expected primary-expression before ')' token
std::shared_ptr<BaseClass> base = make_shared<BaseClass>();
^
prog.cpp:13:2: error: 'shared_ptr' is not a member of 'std'
std::shared_ptr<DerivedClass> derived = make_shared<DerivedClass>();
^
prog.cpp:13:30: error: expected primary-expression before '>' token
std::shared_ptr<DerivedClass> derived = make_shared<DerivedClass>();
^
prog.cpp:13:32: error: 'derived' was not declared in this scope
std::shared_ptr<DerivedClass> derived = make_shared<DerivedClass>();
^
prog.cpp:13:66: error: expected primary-expression before '>' token
std::shared_ptr<DerivedClass> derived = make_shared<DerivedClass>();
^
prog.cpp:13:68: error: expected primary-expression before ')' token
std::shared_ptr<DerivedClass> derived = make_shared<DerivedClass>();
^
prog.cpp:15:38: error: 'dynamic_pointer_cast' was not declared in this scope
bool baseIsAnInstanceOfBaseClass = (dynamic_pointer_cast<BaseClass>(base) != NULL);
^
prog.cpp:15:68: error: expected primary-expression before '>' token
bool baseIsAnInstanceOfBaseClass = (dynamic_pointer_cast<BaseClass>(base) != NULL);
^
prog.cpp:16:74: error: expected primary-expression before '>' token
bool baseIsAnInstanceOfDerivedClass = (dynamic_pointer_cast<DerivedClass>(base) != NULL);
^
prog.cpp:17:71: error: expected primary-expression before '>' token
bool derivedIsAnInstanceOfBaseClass = (dynamic_pointer_cast<BaseClass>(derived) != NULL);
^
prog.cpp:18:77: error: expected primary-expression before '>' token
bool derivedIsAnInstanceOfDerivedClass = (dynamic_pointer_cast<DerivedClass>(derived) != NULL);
^
prog.cpp:20:101: error: invalid operands of types 'const char [6]' and '<unresolved overloaded function type>' to binary 'operator<<'
cout << "base is an instance of BaseClass = " << baseIsAnInstanceOfBaseClass ? "true" : "false" << endl;
^
prog.cpp:21:107: error: invalid operands of types 'const char [6]' and '<unresolved overloaded function type>' to binary 'operator<<'
cout << "base is an instance of DerivedClass = " << baseIsAnInstanceOfDerivedClass ? "true" : "false" << endl;
^
prog.cpp:22:107: error: invalid operands of types 'const char [6]' and '<unresolved overloaded function type>' to binary 'operator<<'
cout << "derived is an instance of BaseClass = " << derivedIsAnInstanceOfBaseClass ? "true" : "false" << endl;
^
prog.cpp:23:113: error: invalid operands of types 'const char [6]' and '<unresolved overloaded function type>' to binary 'operator<<'
cout << "derived is an instance of DerivedClass = " << derivedIsAnInstanceOfDerivedClass ? "true" : "false" << endl;
^