【发布时间】:2019-03-22 21:48:34
【问题描述】:
在 C++ 标准的当前草案(2019 年 3 月)[class.friend] p.6 状态(强调我的):
当且仅当该类是非本地类([class.local]),函数名称是非限定的,函数具有命名空间范围时,才能在类的友元声明中定义函数。 [...]
“函数具有命名空间范围”是什么意思?
我能想到的函数没有命名空间范围的唯一情况如下:
struct A
{
static void f();
struct B
{
friend void f() {};
};
};
然而,clang 和 gcc 都没有将B 中的friend 定义 与A 中的静态方法相关联,而是将属于全局命名空间的函数。
还有其他我想念的情况吗?
【问题讨论】:
标签: c++ language-lawyer friend