How to Use typename Keyword in C++? (original) (raw)

Last Updated : 10 Jun, 2026

The typename keyword in C++ is used to indicate that a dependent name refers to a type. It is primarily used in templates where the compiler cannot determine whether a name represents a type or a member variable during parsing.

Uses of typename in C++

The typename keyword is mainly used in the following scenarios:

Declaring Template Type Parameters

typename can be used to declare a template type parameter. In this context, it is interchangeable with the class keyword.

C++ `

template class MyClass { // Class definition };

`

Here, T represents a type that will be specified when the template is instantiated.

Referring to Dependent Types

Inside templates, the compiler cannot always determine whether a dependent name represents a type or a data member. In such cases, typename must be used to explicitly indicate that the name refers to a type.

C++ `

cppCopy codetemplate class MyClass { public: void myMethod() { typename T::nested_type variable; // 'typename' is necessary here to specify that T::nested_type is a type } };

`

Here, typename tells the compiler that T::nested_type is a type.

Example: Using typename with Iterators

The following program demonstrates the use of typename when working with iterators inside a function template.

C++ `

#include #include using namespace std;

// function for printing elements of a container // passed as parameter template void printElements(const T& container) { // loop using the iterator it of container type for (typename T::const_iterator it = container.begin(); it != container.end(); ++it) { // Dereferencing iterator for getting the element // and print it cout << *it << " "; } // Print a newline character after all elements are // printed cout << endl; }

int main() { // Create a vector vec and initialize it vector vec = { 1, 2, 3, 4, 5 };

// Use the template function to print elements of the
// vector
cout << "Elements: ";
printElements(vec);

return 0;

}

`

Output

Elements: 1 2 3 4 5

**Explanation

**Time Complexity: O(1), considering vector has constant number of elements.
**Auxilliary Space: O(1)