I want to define a type name in a templated class that I can use elsewhere to refer to the type of a member in the class.
template <class T>
class CA
{
public:
//typedef typename T::iterator iterator_type;
typedef typename T ElementType1; // compile error on this line
//typedef T ElementType2;
T m_element;
};
and use it like this:
template <class T>
class CDerived : public CBase<typename T::ElementType1>
{
//...
};
and declare objects like:
typedef CDerived<CA> MyNewClass;
Is this not possible? I have some code that compiles correctly under VS2010 but not under Xcode that uses the line:
typedef typename T ElementType1;
Apparently the compiler is expecting a qualified name after typename but I don't see how there can be one for the template type.
I dont understand the difference between ElementType1 and ElementType2 in this context.
I looked at many questions on stack overflow but most seemed to refer to only the kind of declaration like iterator_type in my example.
typedef T ElementType
. Really I wasn't sure if typename should be in there or not. I understand its use in theCBase<typename T::ElementType>
. Here is more info about type name link. It seems like VS2010 accepts the ElementType1 declaration however, but perhaps not gcc. – Unattended