类和结构可以在模板专业化中互换使用吗?

时间:2019-05-02 00:34:34

标签: c++ template-specialization

我可以使用关键字struct来专门化用关键字class声明的模板类吗?最小,完整,可验证的示例:

template <class T>
class X {};

template <>
struct X<int> {};  // explicit specialization (full specialization)

template <class T>
struct X<X<T>> {}; // partial specialization

此代码在GCC 8.3Clang 8.0上编译。

标准对此有何看法?感谢引用该标准并提供解释。

1 个答案:

答案 0 :(得分:2)

这是有效的。

[temp.class] / 4:

  

在重新声明,部分专业化,显式专业化或   类模板的显式实例化, class-key   同意原始类模板声明   ([dcl.type.elab])。

[dcl.type.elab] / 3定义“实物同意”:

  

class-key 或enum关键字出现在   精加工类型说明符应与精加工类型说明符中的名称所引用的声明相符。 [...]   因此,在任何精心设计的类型说明符中,enum关键字应为   用于引用枚举([dcl.enum]),union class-key   应用于引用联合([class]),并且class或   struct class-key 必须用于引用一个类([class])   使用classstruct class-key 声明。