#include <iostream>
using namespace std;
class figure
{
public:
virtual ~figure(){}
};
class Pawn : public figure
{
public:
virtual ~Pawn(){}
};
void value(figure fi)
{
cout << "val typeid check: " << (dynamic_cast<Pawn*>(&fi) != nullptr) << endl;
if (dynamic_cast<Pawn*>(&fi) != nullptr)
{
Pawn& p = dynamic_cast<Pawn&>(fi);
}
}
void refer(figure& fi)
{
cout << "val typeid check: " << (dynamic_cast<Pawn*>(&fi) != nullptr) << endl;
if (dynamic_cast<Pawn*>(&fi) != nullptr)
{
Pawn& p = dynamic_cast<Pawn&>(fi);
}
}
int main()
{
Pawn p;
value(p);
refer(p);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIGZpZ3VyZQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgfmZpZ3VyZSgpe30KfTsKCmNsYXNzIFBhd24gOiBwdWJsaWMgZmlndXJlCnsKcHVibGljOgogICAgdmlydHVhbCB+UGF3bigpe30KfTsKCnZvaWQgdmFsdWUoZmlndXJlIGZpKQp7CiAgICBjb3V0IDw8ICJ2YWwgdHlwZWlkIGNoZWNrOiAiIDw8IChkeW5hbWljX2Nhc3Q8UGF3bio+KCZmaSkgIT0gbnVsbHB0cikgPDwgZW5kbDsKICAgIGlmIChkeW5hbWljX2Nhc3Q8UGF3bio+KCZmaSkgIT0gbnVsbHB0cikKICAgIHsKICAgICAgICBQYXduJiBwID0gZHluYW1pY19jYXN0PFBhd24mPihmaSk7CiAgICB9Cn0KCnZvaWQgcmVmZXIoZmlndXJlJiBmaSkKewogICAgY291dCA8PCAidmFsIHR5cGVpZCBjaGVjazogIiA8PCAoZHluYW1pY19jYXN0PFBhd24qPigmZmkpICE9IG51bGxwdHIpIDw8IGVuZGw7CiAgICBpZiAoZHluYW1pY19jYXN0PFBhd24qPigmZmkpICE9IG51bGxwdHIpCiAgICB7CiAgICAgICAgUGF3biYgcCA9IGR5bmFtaWNfY2FzdDxQYXduJj4oZmkpOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIFBhd24gcDsKICAgIHZhbHVlKHApOwogICAgcmVmZXIocCk7Cn0K