g++: declaration of a friend from within a namespace

Matthias Kaehlcke matthias@kaehlcke.net
Tue Jun 3 07:11:00 GMT 2008

El Mon, Jun 02, 2008 at 05:47:37PM -0300 Alexandre Oliva ha dit:

> On Jun  2, 2008, Matthias Kaehlcke <matthias@kaehlcke.net> wrote:
> > namespace ns { class MyClass { friend MyClass ::operator+(MyClass,
> > MyClass); private: int attribute; }; }
> This is parsed as MyClass::operator+ (whitespace is not significant),
> so you end up missing the return type. 

ok, that's what i didn't catch
> > when removing the default namespace specifier ('::') from the friend
> > declaration the error message changes to:
> Then the friend declaration injects the name in the enclosing
> namespace ns, so that's where you'd have to define it.  A definition
> in the global namespace doesn't match, so it isn't granted access to
> private members.
> > i can't figure out what would be the correct friend declaration with
> > the operator in the default namespace.
> Adding parentheses around the declarator id (::operator+) should work.

with the parentheses it works, thanks a lot for your helpful answer!

Matthias Kaehlcke
Embedded Linux Engineer

      In itself, homosexuality is as limiting as heterosexuality: the
     ideal should be to be capable of loving a woman or a man; either,
      a human being, without  feeling fear, restraint, or obligation
                          (Simone de Beauvoir)
    using free software / Debian GNU/Linux | http://debian.org  : :'  :
                                                                `. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4                  `-

More information about the Gcc-help mailing list