This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Template friends


I thought too. Especially since it works with 3.3.x and earlier.

On Wed, 2005-02-09 at 13:41 -0600, corey taylor wrote:
> Al,
> 
>   It would seem to me that:
> 
> template<class T> class A;
> template<class T> int foobar(const A<T> &x);
> 
> template<class T> class A
> {
>  friend int foobar<T>(const A<T> &);
> };
> 
> should work.
> 
> corey
> 
> 
> On Wed, 09 Feb 2005 11:21:10 -0800, Al Niessner
> <Al.Niessner@jpl.nasa.gov> wrote:
> > 
> > Ooops. The error is being thrown on the friends line. I am compiling
> > a.cc whose first line is #include "a.h" which is the snippet I gave.
> > Instantiation then follows some number of lines later with A<double>.
> > 
> > So, the whole error is:
> > In file included from a.cc:1,
> > a.h:29: error: `foobar' is neither function nor member function; cannot
> > be declared friend
> > 
> > 
> > On Wed, 2005-02-09 at 13:01 -0600, corey taylor wrote:
> > > Al,
> > >
> > >   What line is this error thrown on and where are you instantiating?
> > >
> > > corey
> > >
> > >
> > > On Wed, 09 Feb 2005 10:10:31 -0800, Al Niessner
> > > <Al.Niessner@jpl.nasa.gov> wrote:
> > > > In the previous post I mistakenly referenced my declaration as looking
> > > > like h<>() in 14.5.3.2 when I should have said preempt<>() in 14.5.3.1's
> > > > example. I can also change the friend the statement to be 'friend int
> > > > foobar<T>(A<T> &);' and it fails with the same error.
> > > >
> > > > On Wed, 2005-02-09 at 09:55 -0800, Al Niessner wrote:
> > > > > I figure my parser is wrong and g++ is correct, but I have no idea as to
> > > > > why.
> > > > >
> > > > > g++ --version == 3.4.1
> > > > >
> > > > > Code fragment:
> > > > >
> > > > > template<class T> class A;
> > > > > template<class T> int foobar(const A<T> &x);
> > > > >
> > > > > template<class T> class A
> > > > > {
> > > > >   ...
> > > > >   friend int foobar<>(const A<T> &);
> > > > >   ...
> > > > > }
> > > > >
> > > > > gives me this:
> > > > > error: `dim' is neither function nor member function; cannot be declared
> > > > > friend
> > > > >
> > > > > So, I opened my copy of ISO 14882;2003 and read 14.5.3 and cannot find
> > > > > what is wrong with my syntax. In fact, it looks similar to h<>() in the
> > > > > 14.5.3.2 example. So, what is wrong with the above syntax?
> > > > >
> > > > --
> > > > Al Niessner
> > > > 818.354.0859
> > > >
> > > > All opinions stated above are mine and do not necessarily reflect those
> > > > of JPL or NASA.
> > > >
> > > > --------
> > > > |  dS  | >= 0
> > > > --------
> > > >
> > > >
> > --
> > Al Niessner
> > 818.354.0859
> > 
> > All opinions stated above are mine and do not necessarily reflect those
> > of JPL or NASA.
> > 
> > --------
> > |  dS  | >= 0
> > --------
> > 
> >
-- 
Al Niessner
818.354.0859

All opinions stated above are mine and do not necessarily reflect those
of JPL or NASA.

--------
|  dS  | >= 0
--------


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]