typename

suggest change
  1. When followed by a qualified name, typename specifies that it is the name of a type. This is often required in templates, in particular, when the nested name specifier is a dependent type other than the current instantiation. In this example, std::decay<T> depends on the template parameter T, so in order to name the nested type type, we need to prefix the entire qualified name with typename. For more details, see Where and why do I have to put the “template” and “typename” keywords?
    template <class T>
    auto decay_copy(T&& r) -> typename std::decay<T>::type;
  2. Introduces a type parameter in the declaration of a template. In this context, it is interchangeable with class.
    template <typename T>
    const T& min(const T& x, const T& y) {
        return b < a ? b : a;
    }
  3. typename can also be used when declaring a template template parameter, preceding the name of the parameter, just like class.
    template <template <class T> typename U>
    void f() {
        U<int>::do_it();
        U<double>::do_it();
    }

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:


keywords:
* class
* float
* bool
* void
* char
* short
* long
* double
* int
* enum
* if
* do
* else
* true
* false
* const
* for
* goto
* struct
* case
* catch
* return
* signed
* static
* this
* switch
* throw
* try
* break
* union
* asm
* sizeof
* typename

Table Of Contents
8 Arrays
11 Loops
14 keywords
39 Streams
51 Unions
56 Lambdas
60 SFINAE
62 RAII
67 Sorting
84 RTTI
87 Scopes
104 Profiling
107 Recursion
117 Iteration
125 Alignment
134 Semaphore
136 Debugging
139 Mutexes
142 decltype