C++03 标准中的模板章节开头如下:
模板定义了一系列类或函数。
模板声明: 导出opt模板 <模板参数列表> 声明 模板参数列表: 模板参数 模板参数列表,模板参数
模板声明中的声明应
— 声明或定义一个函数或一个类,或
— 定义类模板或嵌套在类模板中的类 的成员函数、成员类或静态数据成员,或
— 定义一个类或类模板的成员模板。
模板声明是一个声明。如果模板声明定义了一个函数、一个类或一个静态数据成员,那么它也是一个定义。
因此,根据我阅读粗体文本的理解,除了class -template和function-template之外,我们还可以定义静态 data-member- template 。但我从未见过static data-member-template。它究竟是如何定义的?我尝试了以下方法,但 GCC 不接受它(ideone):
template<typename T> struct X{};
template<typename T>
struct A
{
template<typename U> static X<U> data_member;
};
所以我开始怀疑自己是否正确理解了这句话。我到底错过了什么?或者我们如何准确地定义静态数据成员模板?粗体字是什么意思?