【发布时间】:2023-03-25 23:06:01
【问题描述】:
以下代码会产生编译错误(至少在最新版本的 gcc 上):
namespace a {
class X { friend void ::foo(); };
}
错误是:
'void foo()' should have been declared inside '::'
如果我们从声明中删除::,根据标准,foo 将被引入命名空间a(尽管它不可见)。不需要在 a 中预先声明 foo。
我的问题是,鉴于上述情况,为什么在全局命名空间中预先声明是一项要求?为什么名称foo 不成为全局命名空间的成员?我在标准中也找不到任何明确禁止这样做的段落,所以我很想知道。
【问题讨论】:
标签: c++ namespaces friend