#include <iostream>
#include <typeinfo>
using namespace std;
#define self this
class Base
{
private:
void base_foo() {cout << "base foo" << endl;}
protected:
void base_bar() {cout << "base bar" << endl;}
public:
Base()
{
if(string(typeid(*self).name()) == string("4Base"))
base_foo();
base_bar();
}
};
class Derived
: public Base
{
public:
Derived()
: Base()
{
cout << "Derived created" << endl;
}
};
int main() {
Derived derived;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgc2VsZiB0aGlzCmNsYXNzIEJhc2UKewpwcml2YXRlOgoJdm9pZCBiYXNlX2ZvbygpIHtjb3V0IDw8ICJiYXNlIGZvbyIgPDwgZW5kbDt9CnByb3RlY3RlZDoKCXZvaWQgYmFzZV9iYXIoKSB7Y291dCA8PCAiYmFzZSBiYXIiIDw8IGVuZGw7fQpwdWJsaWM6CglCYXNlKCkKCXsKCQlpZihzdHJpbmcodHlwZWlkKCpzZWxmKS5uYW1lKCkpID09IHN0cmluZygiNEJhc2UiKSkKCQkJYmFzZV9mb28oKTsKCQliYXNlX2JhcigpOwoJfQp9OwpjbGFzcyBEZXJpdmVkCgk6IHB1YmxpYyBCYXNlCnsKcHVibGljOgoJRGVyaXZlZCgpCgkJOiBCYXNlKCkKCXsKCQljb3V0IDw8ICJEZXJpdmVkIGNyZWF0ZWQiIDw8IGVuZGw7Cgl9Cn07CgppbnQgbWFpbigpIHsKCURlcml2ZWQgZGVyaXZlZDsKCXJldHVybiAwOwp9