g++-2.95.2 bug: can't have friend template function w/ same name/sig as member

sebor@my-Deja.com
Fri Dec 24 12:48:00 GMT 1999


Hi, 

The following code does not compile if the template function foo() has the same name and signature as a
member of class bar, and is also declared a friend of class bar: 

/////////////  file foo.cpp ///////////// 

template <class T> struct bar; 

template <class T> 
bar<T> foo (const bar<T>&, T); 

template <class T> 
struct bar 
{ 
    friend bar foo<> (const bar&, T); 

    bar<T> foo (T) const; 
}; 

template class bar<int>; 

///////////////////////////////////////////// 
  

  
micro:~> g++ -v -c foo.cpp 
Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs 
gcc version 2.95.2 19991024 (release) 
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2
-D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__
-D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTIONS
-Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686
-D__i686__ -D__pentiumpro -D__pentiumpro__ foo.cpp /tmp/ccOTm0V9.ii 
GNU CPP version 2.95.2 19991024 (release) (i386 Linux/ELF) 
#include "..." search starts here: 
#include <...> search starts here: 
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3 
 /usr/local/include 
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../i686-pc-linux-gnu/include 
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include 
 /usr/include 
End of search list. 
The following default directories have been omitted from the search path: 
End of omitted list. 
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cc1plus /tmp/ccOTm0V9.ii -quiet -dumpbase foo.cc
-version -o /tmp/ccw54f48.s 
GNU C++ version 2.95.2 19991024 (release) (i686-pc-linux-gnu) compiled by GNU C version 2.95.2
19991024 (release). 
foo.cpp: In instantiation of `bar<int>': 
foo.cpp:15:   instantiated from here 
foo.cpp:10: invalid use of undefined type `class bar<int>' 
foo.cpp:13: forward declaration of `class bar<int>' 
  
  


--== Sent via Deja.com http://www.deja.com/ ==--
Share what you know. Learn what you don't.


More information about the Gcc-bugs mailing list