1.一般情况下,在声明一个模板类型参数是,class与typename一样
2.当类型为嵌套依赖类型时,在类型名前加typename,如:
typename std::iterator_traits(Iterator)::value_type t;
这里std::iterator_traits(Iterator)::value_type是一个嵌套依赖类型,所以要在前面加typename(不加typename编译器不会将他认为是类型,而是将value_type认为是iterator_traits(Iterator)的成员变量)
3.嵌套依赖类型在基类列表(继承)中或成员初始化列表中作为基类标识符时,不加typename