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