【发布时间】:2015-08-18 00:41:17
【问题描述】:
不同的编译器似乎对这个问题有不同的看法。以下代码使用gcc 编译良好,但使用clang 编译失败:
class Base {
protected:
static void f() {}
};
class Derived : public Base {
friend class DerivedFriend;
};
class DerivedFriend {
public:
void g() {
Base::f();
}
};
clang的错误是:
main.cpp:13:15: error: 'f' is a protected member of 'Base'
Base::f();
^
main.cpp:3:17: note: declared protected here
static void f() {}
^
1 error generated.
【问题讨论】:
-
@BlakeMcConnell 我不这么认为。在您所指的问题中,“朋友箭头”具有不同的方向:类层次结构是单个类的朋友。
-
同意,但是看看这个:stackoverflow.com/questions/9878723/…
-
@BlakeMcConnell 是的,这看起来很相似,但如果我在发布我的问题之前找到这个问题,我们不会看到 T.C. 的详尽答案:)
-
@BlakeMcConnell 那是针对非静态成员的,有一个额外的规则。