#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
template<class T> class X{
//without typename , you should get an error:
typename T::id i;
//T::id i;
public:
void f(){i.g();}
};
class Y{
public:
class id{
public:
void g(){}
};
};
int main(){
X<Y> xy;
xy.f();
}
必须使用typename(class) 来定义模板中的嵌套类对象。否则编译器不知道这个T::id是静态变量还是类型名。