关于基类的友元对派生类成员的访问权限,该怎么解决

关于基类的友元对派生类成员的访问权限
我看了下面的贴子后发现问题
http://topic.csdn.net/u/20091204/16/440ccc4a-9a49-401a-984f-06f787a8aa3b.html?seed=1715884718&r=65150379

原帖里LZ的代码,除了最后两行,也就是
// int mem5(protected_derived d) {return d.j2;}
// int mem6(protected_derived d) {return d.j3;}
不能成功编译外,其他全部能编译成功,我用的是 VC++6.0,究竟是怎么回事?


我自己测试的结论是:基类的友元能访问派生类的所有从基类继承的成员,无论是哪种继承关系。这个结论对吗?

------解决方案--------------------
错。基类的友元不能访问派生类的成员的。举个例子:你的朋友也是你父亲的朋友?你父亲的朋友也是你的朋友??显然是错的。友元关系不能继承的
------解决方案--------------------
不过,int mem1(protected_derived d) {return d.pub_val;}

这种调用应该失败,因为在protected_derived类及其友元之外,是不应该知道protected_derived是派生自Base的,如果你编译器让它通过,说明这是编译器bug