#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;
}