This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/12962] New: g++ fails to match template function
- From: "smelkov at mph1 dot phys dot spbu dot ru" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 8 Nov 2003 12:29:33 -0000
- Subject: [Bug c++/12962] New: g++ fails to match template function
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
g++ fails to find B::xxx(X<B>) claiming that candidate is B::xxx(T&) [with T=X<B>]
if i change #if 0 to #if 1 everything is ok in contrary.
--- xxx.cpp ---
template <typename T>
class X {
public:
int x_call() { return 0; }
X(T&) {}
};
template <typename T>
class A {
public:
int a_call()
{
T* __this = static_cast<T*>(this);
#if 0
X<T> xt(*__this);
return __this->xxx(xt);
#else
return __this->xxx(X<T>(*__this));
#endif
}
A() {}
~A() {}
};
class B : public A<B> {
public:
int val;
template <typename T>
int xxx(T& x)
{ return x.x_call(); }
B() { val = a_call(); }
};
int main()
{
B b;
return 0;
}
--- end of xxx.cpp ---
[kirr@roro templates]$ g++ -v -Wall xxx.cpp
Reading specs from /mnt/tmini/kirr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/specs
Configured with: ../gcc-3.3.2/configure --prefix=/mnt/tmini/kirr/local/gcc-3.3.2 --with-gnu-as
--with-gnu-ld --enable-threads=posix --enable-languages=c,c++,f77 --enable-checking
--disable-nls
Thread model: posix
gcc version 3.3.2
/mnt/tmini/kirr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/cc1plus -quiet -v -iprefix
/usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3.2/ -D__GNUC__=3 -D__GNUC_MINOR__=3
-D__GNUC_PATCHLEVEL__=2 -D_GNU_SOURCE xxx.cpp -D__GNUG__=3 -quiet
-dumpbase xxx.cpp -auxbase xxx -Wall -version -o /tmp/.private/kirr/ccA3tcwa.s
GNU C++ version 3.3.2 (i686-pc-linux-gnu)
compiled by GNU C version 3.3.2.
GGC heuristics: --param ggc-min-expand=38 --param ggc-min-heapsize=15747
ignoring nonexistent directory
"/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../include/c++/3.3.2"
ignoring nonexistent directory
"/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../include/c++/3.3.2/i686-pc-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../include/c++/3.3.2/backward"
ignoring nonexistent directory "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include"
ignoring nonexistent directory
"/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/../../../../i686-pc-linux-gnu/include"
ignoring nonexistent directory "/mnt/tmini/kirr/local/gcc-3.3.2/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/mnt/tmini/kirr/local/gcc-3.3.2/include/c++/3.3.2
/mnt/tmini/kirr/local/gcc-3.3.2/include/c++/3.3.2/i686-pc-linux-gnu
/mnt/tmini/kirr/local/gcc-3.3.2/include/c++/3.3.2/backward
/usr/local/include
/mnt/tmini/kirr/local/gcc-3.3.2/include
/mnt/tmini/kirr/local/gcc-3.3.2/lib/gcc-lib/i686-pc-linux-gnu/3.3.2/include
/usr/include
End of search list.
xxx.cpp: In member function `int A<T>::a_call() [with T = B]':
xxx.cpp:34: instantiated from here
xxx.cpp:18: error: no matching function for call to `B::xxx(X<B>)'
xxx.cpp:32: error: candidates are: int B::xxx(T&) [with T = X<B>]
--
Summary: g++ fails to match template function
Product: gcc
Version: 3.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: smelkov at mph1 dot phys dot spbu dot ru
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12962