C++移除export关键字后,翻译第8阶段是否已无存在必要?
关于C++翻译第8阶段必要性的疑问
C标准中的翻译第8阶段最初是为支持社区期望的模板分离编译模型添加的(源自1995年的N0818文档)。但自C11中export关键字被移除后,我认为该阶段已无存在必要,理由如下:
- 若模板特化的引用触发隐式实例化,该实例化会在第7阶段执行。根据[temp.pre]/10规范,模板定义需在同一翻译单元(TU)中可用,除非其他TU中存在显式实例化。
- 若其他TU中存在显式实例化,该实例化会在第7阶段执行,且在第9阶段为需要其定义的已翻译单元提供支持。
- 因此,标准已不再考虑“某个TU中定义的模板是否实例化取决于其他TU是否引用它”的场景,而这正是翻译第8阶段的设计初衷,故该阶段已无实际作用。
- 编译器仍可借助[temp.pre]/10中IFNDR赋予的自由度,执行翻译第8阶段原本支持的按需实例化。但仅为说明“若选择不诊断程序,可执行此操作”而保留该阶段并无意义,因IFNDR本就允许实现执行任意操作。
请问我的上述理解是否存在偏差?
内容的提问来源于stack exchange,提问作者Brian Bi
相关产品推荐
相关产品推荐

