This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/12962] New: g++ fails to match template function


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]