C++11 局部和匿名类型作模板实参
一 简介
《深入理解C++11》
局部和匿名类型作模板实参
C++11 将C++98中的该限制放开
但不能在模板实参的位置进行以上的类型的声明定义
二 举例
template <typename T>
class Demo {};
template <typename T>
void func(T t) {}
struct S1 {
} a1;
struct {} a2; // 匿名类型变量
typedef struct {} S2; // 匿名类型?
int main() {
struct S3 {} a3; // 局部类型
Demo<S1> d1; // C++98 通过 C++11通过
Demo<S2> d2; // C++98 通过 C++11通过!!
Demo<S3> d3; // C++98 错误 C++11通过
// iDemo < struct {} > d4;
func(a1); // C++98 通过 C++11通过
func(a2); // C++98 错误 C++11通过
func(a3); // C++98 错误 C++11通过
return 0;
}
g++ test.cpp -o a.out -std=c++98
g++ test.cpp -o a.out -std=c++11 通过