// Forward declaration. template<typename T = void> struct C; // Definition of specialized template base class. template<> struct C<> { }; // Definition of general template. template<typename T> struct C : C<> { }; // Definition of specialized template. template<> struct C<int> : C<> { };