【发布时间】:2014-11-19 12:00:00
【问题描述】:
鉴于以下 §3.5/4 中的陈述(强调我的)和 §7.3.1.1/1 中的注释 [94],我想有一个在未命名命名空间中声明的实体的单个示例,该命名空间具有外部联动。
§3.5/4
未命名的命名空间或直接或间接声明的命名空间 在未命名的命名空间中具有内部链接。所有其他命名空间 有外部联系。 名称空间范围尚未被 上面给定的内部链接与封闭的链接具有相同的链接 命名空间,如果是
的名字
- 一个变量;或
- 一个函数;或
- 命名类(第 9 条),或在 typedef 声明中定义的未命名类,其中该类具有用于链接的 typedef 名称 目的(7.1.3);或
- 命名枚举 (7.2),或在 typedef 声明中定义的未命名枚举,其中枚举的 typedef 名称为 链接目的(7.1.3);或
- 属于具有链接的枚举的枚举数;或
- 一个模板。
第 7.3.1.1/1 节的注释 [94]:
虽然未命名命名空间中的实体可能具有外部链接, 他们有效地被他们的翻译所独有的名字所限定 单位,因此永远无法从任何其他翻译单位看到。
【问题讨论】:
-
我怀疑脚注可能是 C++03 的遗留物,其中未命名命名空间中的名称具有外部链接(因为否则它们不能用作模板参数)。作者只是忘记删除它。
标签: c++ c++11 namespaces language-lawyer linkage