typename指示一个类型名,而非定义一个类型,以下声明了一个Seq::iterator类型的变量itr,其中Seq是一个模板实例化时才知道的类: typename Seq::iterator itr; 如果没有typename指示,Seq::iterator会被认为是Seq的静态变量,而不是类型名。 typename关键字不会定义一个类型,如果你想定义一个新类型的话,你必须这样: typedef typename Seq::iterator ITR;