Template object is an incomplete type, for an obvious reason in some cases it's hard for compiler to decide what typename should be. Let's look at the this example
template<typename T> class A { public: struct B { T member; }; }; template<typename T> class C { public: A<T>::B member; };Your(and mine also ;]) compiler will probably tell you " type A<T> is not derived from type C<T>". A<T> is undefined, so A<T>::B is undefined also.
To make this work you have to tell compiler explicitly that A<T>::B is a typename.
template<typename T> class A { public: struct B { T member; }; }; template<typename T> class C { public: typename A<T>::B member; };
No comments:
Post a Comment