This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/15664] Linker fails to find (inline) function
- From: "bangerth at dealii dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 26 May 2004 20:56:42 -0000
- Subject: [Bug c++/15664] Linker fails to find (inline) function
- References: <20040526185537.15664.igodard@pacbell.net>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From bangerth at dealii dot org 2004-05-26 20:56 -------
Alright, that's better. I think this actually shows a gcc bug:
------------------
template <int N> struct S {
template<template<typename> class A>
friend void foo();
};
template<template<typename> class A>
void foo();
template <typename> struct X {};
int main () {
S<1> s;
foo<X>();
}
-------------------
The friend declaration should inject the name into the global namespace,
and it should be identified with the other declaration. However, we get
this:
g/x> /home/bangerth/bin/gcc-3.3.4-pre/bin/c++ -c x.cc
x.cc: In function `int main()':
x.cc:13: error: call of overloaded `foo()' is ambiguous
x.cc:7: error: candidates are: void foo() [with A = X]
x.cc:3: error: void foo() [with A = X, int N = 1]
(Note also that the last line is pretty bad, since it lists the
template argument to the enclosing class, which, however, isn't
specified at all in the rest of the line.) Interestingly enough,
the error goes away if
a) S is made a non-template
b) foo takes as template argument not a template template parameter,
but a regular type or value
May someone else try to figure out from this what's going wrong.
This bug is on all versions of gcc.
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Known to fail| |2.95.3 3.3.4 3.4.0
Last reconfirmed|0000-00-00 00:00:00 |2004-05-26 20:56:41
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15664