#include <memory>
struct X
{
virtual ~X() { }
};
struct Y : X
{
};
int main()
{
std::shared_ptr<X> pX = std::make_shared<Y>();
std::shared_ptr<Y> pY = std::dynamic_pointer_cast<Y>(pX);
}
ICAgICNpbmNsdWRlIDxtZW1vcnk+CgogICAgc3RydWN0IFgKICAgIHsKICAgICAgICB2aXJ0dWFsIH5YKCkgeyB9CiAgICB9OwoKICAgIHN0cnVjdCBZIDogWAogICAgewogICAgfTsKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgc3RkOjpzaGFyZWRfcHRyPFg+IHBYID0gc3RkOjptYWtlX3NoYXJlZDxZPigpOwogICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxZPiBwWSA9IHN0ZDo6ZHluYW1pY19wb2ludGVyX2Nhc3Q8WT4ocFgpOwogICAgfQo=