1 #include <iostream> 2 #include <utility> 3 4 struct S { 5 template<typename T> 6 static const T var=0; // declaration of a static data member template 7 }; 8 9 10 11 int main(){ 12 13 std::cout << std::is_same< decltype(S::var<int>), const int >::value; 14 15 }
变量模板。是函数模板,类型模板,别名模板之后,另一种模板。
类S的静态成员变量S::var<int>的类型是const int
注意,V.T.只能定义在名字空间中,如下是错误的,因为那里不是名字空间:
int main(){ template<typename T> static const T var=0; }
而如下是正确的:
template<typename T> static const T var = 0; int main(){ std::cout << var<int>; }
这里是全局名字空间,因此也是符合“定义在名字空间里”。
参考:http://en.cppreference.com/w/cpp/language/variable_template