template<typename T>
struct MyIter
{
typedef T value_type;
T* m_p;
MyIter(T* p):m_p(p){}
T* operator*() {return m_p;}
};
template<typename T>
typename T::value_type Func(T iter)
{
return *iter;
}
上述为stl源码源码解剖中的一段;
Func函数声明需要加上typename ,编译器在编译这个函数的时候对于T::value_type 一无所知,可以理解为某个类型(这是希望的),也可以是代表某类成员函数或者数据成员;给出typename,可以让编译确定它是一个类别。