Keyword typename The keyword typename was introduced to specify that the identifier that follows is a type. Consider the following example: template Class MyClass { typename T::SubType * ptr; ... }; Here, typename is used to clarify that SubType is a type of class T. Thus, ptr is a pointer to the type T::SubType. Without typename, SubType would be considered a static member. Thus T::SubType * ptr would be a multiplication of value SubType of type T with ptr. ============================================================================== Palabra reservada typename La palabra reservada "typename" fue introducida para especificar que el identificador que le sigue es un tipo. Considere el siguiente ejemplo: template Class MiClase { typename T::SubTipo * ptr; ... }; Acá, "typename" es usado para aclara que "SubTipo" es un tipo de la clase "T". Por eso, "ptr" es un puntero de tipo "T::SubTipo". Sin "typename", SubTipo abría sido considerado como un miembro estático. En este caso: T::SubTipo * ptr sería la multiplicación del valor "SubTipo" del tipo "T" con "ptr". ============================================================================== Tomado de: Nicolai M. Josuttis: The C++ Standard Library: A Tutorial and Reference 1999 by Addison Wesley Longman, Inc. ==============================================================================