#include <iostream>
#include <string>
#include <vector>
#include <typeinfo>

using namespace std;

class Human
{
public:
	Human() {}
	virtual ~Human() {}
};

class Artist: public Human
{
public:
	Artist() {}
	virtual ~Artist() {}
	string name;
};

int main()
{
	vector <Human*> l;

	l.push_back(new Human);
	l.push_back(new Human);
	l.push_back(new Artist);
	l.push_back(new Human);

	Artist *artist = new Artist;
	Human *artist2 = new Artist;
		
	if (typeid (*artist) == typeid(*artist2))
	{
		cout << "ArtistCheck" << endl;
	}

	Artist *bad = 0;
	try {
		typeid(*bad);
	} catch (bad_typeid b)
	{
		cout << "Was bad" << endl;
	}

	for (int i=0; i<l.size(); i++)
	{
		Artist *a = dynamic_cast<Artist*> (l[i]);
		cout << "Cast: " << a << endl;
		cout << "Id: " << typeid(*l[i]).name() << endl;
		if (typeid (*l[i]) == typeid(*artist))
		{
			cout << "Name: " << l[i] << endl;
		}
	}
	return 0;
}


