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