Typename的使用问题

今天发现一个问题,有一个函数

foo(typename list::iterator it) {

}

这里如果去掉typename编译有问题。 因为iterator 是一个模版。

template

class list {

typename MyIter iterator;

}

如果类似这样的定义,那么list::iterator前面就需要typename.