#include <iostream>
#include <typeinfo>
class Bird
{
public:
virtual ~Bird() {}
virtual int chirp() { return 0; }
};
class SomeOtherBird : public Bird
{
public:
virtual int chirp() { return 1; }
};
void nest( Bird& x )
{
std::cout << typeid(x).name() << " says " << x.chirp() << '\n';
}
int main()
{
SomeOtherBird s;
nest( s );
Bird b;
nest( b );
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHR5cGVpbmZvPgoKY2xhc3MgQmlyZAp7CnB1YmxpYzoKICAgdmlydHVhbCB+QmlyZCgpIHt9CiAgIHZpcnR1YWwgaW50IGNoaXJwKCkgeyByZXR1cm4gMDsgfQp9OwoKY2xhc3MgU29tZU90aGVyQmlyZCA6IHB1YmxpYyBCaXJkCnsKcHVibGljOgogICB2aXJ0dWFsIGludCBjaGlycCgpIHsgcmV0dXJuIDE7IH0KfTsKCnZvaWQgbmVzdCggQmlyZCYgeCApCnsKICAgc3RkOjpjb3V0IDw8IHR5cGVpZCh4KS5uYW1lKCkgPDwgIiBzYXlzICIgPDwgeC5jaGlycCgpIDw8ICdcbic7Cn0KCmludCBtYWluKCkKewogICBTb21lT3RoZXJCaXJkIHM7CiAgIG5lc3QoIHMgKTsKCiAgIEJpcmQgYjsKICAgbmVzdCggYiApOwp9