#include template class Base { public: void member(); }; template void Base::member() { std::cout << "This is Base::member()\n"; } template <> void Base::member() { std::cout << "This is the int-specialization\n"; } template class Derived: public Base { public: Derived(); virtual void member(); }; template void Derived::member() { std::cout << "This is Derived::member()\n"; } template Derived::Derived() { this->member(); // Using `this' implies using the // type for which T was instantiated Derived::member(); // Same: calls the Derived member Base::member(); // Same: calls the Base member std::cout << "Derived::Derived() completed\n"; } int main() { Derived d; Derived i; } /* Generated output: This is Derived::member() This is Derived::member() This is Base::member() Derived::Derived() completed This is Derived::member() This is Derived::member() This is the int-specialization Derived::Derived() completed */