From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25258 invoked by alias); 10 Mar 2004 19:55:24 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 25251 invoked by alias); 10 Mar 2004 19:55:24 -0000 Date: Wed, 10 Mar 2004 19:55:00 -0000 Message-ID: <20040310195524.25250.qmail@sources.redhat.com> From: "gdr at integrable-solutions dot net" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20040310154252.14513.bugzilla-gcc@thewrittenword.com> References: <20040310154252.14513.bugzilla-gcc@thewrittenword.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c++/14513] Friend name injection problem (implicit declaration) X-Bugzilla-Reason: CC X-SW-Source: 2004-03/txt/msg01274.txt.bz2 List-Id: ------- Additional Comments From gdr at integrable-solutions dot net 2004-03-10 19:55 ------- Subject: Re: Friend name injection problem (implicit declaration) "bangerth at dealii dot org" writes: | OK, so here's what happens: | ------------ | struct S { | void test (void); | }; | | namespace NS { | class X { | friend class S; | static int *i; | }; | } | | void S::test () { | NS::X::i; | } | --------------- | gcc thinks the 'friend class S' declaration refers to class ::S and thus | allows the access in S::test. All the other compilers seem to believe | that the friend declaration refer to a yet-to-be-declared class NS::S, | and therefore don't allow access in ::S::test. I have yet to understand | what the standard really says in this respect. Kriang? I'm not Kriang but I'm going to answer. Yes, GCC's behaviour is wrong. Compilers that reject the code are right. See the explanation I gave in the link pointed to in the original report. If you want chapter and verse, see somewhere in 7.3.1.x for namespace members that talk about friend declarations. -- Gaby -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14513