#include struct T { int x; int y; }; void f() {} void f(int x) {} void f(struct T y, T z) {} class C { public: virtual void f() { std::cout << "C::f\n"; } void g() { std::cout << "C::g\n"; } }; class D : C { public: void f() { std::cout << "D::f\n"; } void g() { std::cout << "D::g\n"; } }; void g(); int main(int argc, char**argv) { std::cout << 42 << " + " << "19 =" << (42+19) << '\n'; C* c1 = new C(); D* d = new D(); C* c2 = (C*)d; c1->f(); c1->g(); (*d).f(); d->g(); c2->f(); c2->g(); g(); return 0; } template class Lst { public: T val; class Lst * tail; }; template class Lst* append(class Lst*x,class Lst*y) { return 0; } template int length(class Lst*x) { int ans = 0; while(x != NULL) { ++ans; x = x->tail; } } void g() { class Lst y; y.val = 3; y.tail = 0; length(&y); class Lst z; z.val = 13.0; z.tail = 0; length(&z); std::cout << sizeof(y) << " " << sizeof(z) << '\n'; }