Following is the quote from Josuttis book:
The keyword
typename
was introduced to
specify that the identifier that
follows is a type. Consider the
following example:template <class T> Class MyClass { typename T::SubType * ptr; ... };
Here,
typename
is used to clarify that
SubType
is a type ofclass T
. Thus,
ptr
is a pointer to the type
T::SubType
. Withouttypename
,SubType
would be considered a static member.
ThusT::SubType * ptr
would be a multiplication of value
SubType
of typeT
withptr
.