template parameters cannot be friends

Eljay Love-Jensen eljay@adobe.com
Fri May 21 16:31:00 GMT 2004


Hi Naje,

 >but it's working with typedef's can anybody explain need of this?

It is?  It shouldn't!

A typedef is a simple alias.

My GCC fails.  (OS & GCC details below.)

- - - - - - - - - - - - -
class Bar;
class Quux;
template <typename T>
class Foo
{
     typedef T T2;
     friend T2; // fail
     friend class Bar; // OK
     typedef Quux T3;
     friend class T3;  // Hmmm.
};
- - - - - - - - - - - - -

The "friend class T3" worked on my GCC.  I expected it to introduce 
(forward declare) a "class T3", not use the T3 alias to Quux... but it did, 
so there you go.  I haven't needed or used "friend" for many years.

Another thought...

You may be able to get away with using a BOOST static assert in a two-stage 
template Draw function, which compares the T class to Button<T2> class, to 
make sure that T and T2 are the same.

But I think what you really have a misapplication of the static 
polymorphism paradigm.

HTH,
--Eljay

------ system details -------

$ uname -a
CYGWIN_NT-5.1 mn-eljayet 1.5.9(0.112/4/2) 2004-03-18 23:05 i686 unknown 
unknown Cygwin

$ gcc --version
gcc (GCC) 3.3.1 (cygming special)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



More information about the Gcc-help mailing list