template<class T> class Widget;
template<typename T> class Widget;
这两种声明区别不大。但在一些场合,必须使用typename。
iterator是定义在C内部的类型。这样的类型有个名字:nested dependent name。
int和float不依赖任何类型而存在,它们的名字:non-dependent name。
C++在涉及模板中的nested dependent name时,有这么三条规定:
还有一种typename的常见用法: