//: C08:ConstructorOrder.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Order of constructor calls #include #include using namespace std; template class Announce { public: Announce() { cout << typeid(*this).name() << " constructor " << endl; } ~Announce() { cout << typeid(*this).name() << " destructor " << endl; } }; class X : public Announce<0> { Announce<1> m1; Announce<2> m2; public: X() { cout << "X::X()" << endl; } ~X() { cout << "X::~X()" << endl; } }; int main() { X x; } ///:~