首页  >  文章  >  后端开发  >  为什么 GCC 无法在非命名空间范围内编译显式专业化?

为什么 GCC 无法在非命名空间范围内编译显式专业化?

Susan Sarandon
Susan Sarandon原创
2024-11-16 05:40:03135浏览

Why Does GCC Fail to Compile Explicit Specialization in Non-Namespace Scope?

非命名空间范围中的显式专业化

尽管在 Clang 中成功编译,但给定的代码无法在 GCC 中编译。根据 C 标准 ([temp.expl.spec]),可以在可以定义相应主模板的任何范围内声明显式特化。

此行为似乎是 GCC 中的一个错误。根据 CWG 727,[temp.expl.spec] 中有关显式专业化的规则已被修改,以允许在任何相关范围内进行此类声明。

显式专业化的范围

原始标准规定,显式专业化应该在包含专业模板的命名空间中声明。但是,当前标准允许在可以定义主模板的任何范围内显式专业化:

  • 类定义 (12.2)
  • 成员函数 (17.6.2)
  • 内联命名空间 (10.3.1.2)

GCC 未能遵守此更新规则构成了一个错误。该问题已被识别为 Bug 85282,目前由 GCC 开发团队跟踪。

以上是为什么 GCC 无法在非命名空间范围内编译显式专业化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn