struct X
{
template <typename>
struct Y;
template <>
struct Y<int>
{
};
};
此代码无法使用 GCC(甚至 GCC 10 链接(进行编译,并显示以下错误消息
error: explicit specialization in non-namespace scope 'struct X'
根据CPP参考
Explicit specialization may be declared in any scope where its primary template may be defined
此外,我们还有此缺陷报告,其中更改了行为以允许此代码编译CWG 727
然而在这个问题上有一些评论
到目前为止,这似乎还没有解决,gcc dev声称cwg727从未获得批准。 – 斯威夫特 - 星期五派 十一月 22 '19 在 19:11
表示此缺陷报告未获批准。这是真的吗?这是不符合标准的 gcc 错误吗?
这是 gcc 不符合标准,但是(如链接问题中所述(有一个 2018 年的错误报告,所以希望它能得到修复。
作为问题的解决方案,部分模板专用化工作正常,因此您只需添加一个虚拟模板参数。
struct X
{
template <typename, typename=int>
struct Y;
template <typename DUMMY_T>
struct Y<int, DUMMY_T>
{
};
};
这是在编译器资源管理器中。