g++: 'protected' member function cannot be declared friend
Matt Austern
austern@apple.com
Mon Jan 31 22:21:00 GMT 2005
On Jan 31, 2005, at 1:12 PM, Matt Austern wrote:
> On Jan 31, 2005, at 1:05 PM, Fariborz Jahanian wrote:
>
>>
>> g++ issues a diagnostic on this test case.
>> Section 11.4 does not address this issue, but I think that this is a
>> g++ bug. The
>> fact that a member function itself is 'protected' should not prevent
>> it from accessing members of other
>> classes where it is declared as 'friend'.
>>
>>
>> % cat protected.C
>> class FOO {
>> protected:
>> void Push();
>> };
>>
>> class S {
>> friend void FOO::Push();
>> };
>
> The problem is the other way around. FOO::Push() is allowed to access
> private members of classes that declare it to be a friend, but nobody
> said that class S was allowed to access FOO's private or protected
> members. This code is illegal.
Oh, and I should mention: the place where this is addressed is 11.4/7:
"A name nominated by a friend declaration shall be accessible in the
scope of the class containing the friend declaration". This is an
error because the name FOO::Push is not accessible in the scope of S.
--Matt
More information about the Gcc
mailing list