C++98中钞钙,局部的類型和匿名的類型不能做模板類的實(shí)參,如
template<typename T> class X {};
template<typename T> void TempFun(T t) {};
struct A{} a;
struct {int i;}b; //b是匿名類型變量
typedef struct {int i;}B; //B是匿名類型
void fun(){
struct C{} c; //C是局部類型
X<A> x1; //C++98通過(guò) C++11通過(guò)
X<B> x2; //C++98錯(cuò)誤 C++11通過(guò)
X<C> x3; //C++98錯(cuò)誤 C++11通過(guò)
TempFun(a); //C++98通過(guò) C++11通過(guò)
TempFun(b); //C++98錯(cuò)誤 C++11通過(guò)
TempFun(c); //C++98錯(cuò)誤 C++11通過(guò)
}
需要注意的是,雖然匿名類型可以被模板參數(shù)接受,但是如下是不可以的
template <typename T> struct MyTemplate {};
int main(){
MyTemplate<struct {int a;}> t; //無(wú)法編譯通過(guò)工禾,匿名類型的聲明不能在模板實(shí)參位置
return 0;
}