GCC 和非命名空间范围内的显式专用化

gcc and explicit specialization in non-namespace scope

本文关键字:专用 范围内 命名空间 GCC      更新时间:2023-10-16
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>
{
};
};

这是在编译器资源管理器中。