template <class T> class A { public: A(){}; ~A(){}; struct S { long a; T b; }; S* TestFunc( S *p ); }; template <class T> typename A<T>::S* A<T>::TestFunc( S* p ){ return 0; }
template <class T> class B : public A<T> { public: B(){}; ~B(){}; struct S : A<T>::S { double c; }; S* TestFunc( S* p ); }; template <class T> typename B<T>::S* B<T>::TestFunc( S *p ){ return 0; }