#include <iostream>
#include <typeinfo>
using namespace std;

struct Base {};

struct Derived : Base {};



struct Base_Polymorphic {
	virtual ~Base_Polymorphic() {};
};

struct Derived_Polymorphic : Base_Polymorphic {};


int main() {
	cout << "Non-polymorphic:" << endl;
	
	cout << std::is_pod<Base>::value << endl;
	cout << std::is_pod<Derived>::value << endl;
	
	Base * x = new Base;
	Base * y = new Derived;
	cout << typeid(*x).name() << endl;
	cout << typeid(*y).name() << endl;
	delete x;
	delete y;
	
	cout << "------------" << endl;
	
	cout << "Polymorphic:" << endl;
	
	cout << std::is_pod<Base_Polymorphic>::value << endl;
	cout << std::is_pod<Derived_Polymorphic>::value << endl;
	
	Base_Polymorphic * px = new Base_Polymorphic;
	Base_Polymorphic * py = new Derived_Polymorphic;
	cout << typeid(*px).name() << endl;
	cout << typeid(*py).name() << endl;
	delete px;
	delete py;
	
	cout << "------------" << endl;
	
	return 0;
}