We've uncovered a GCC 4.1.1 template bug when we compile using GCC4.1.1,This simple testcase shows the issue.
#include <iostream> template< typename T > void foo( T var) { std::cout << "T" << std::endl; } template < typename T> void doit( T var ) { foo(var); } void foo(const int& var) { std::cout << "INT" << std::endl; } int main() { doit(3); // prints T return 0; } /////////////// temp.cpp //////////////////////////////// Run the example with gcc 3.2.3 rm -f a.out $/v3.2.3/bin/g++ -Wall temp.cpp LD_LIBRARY_PATH=/v3.2.3/lib:$LD_LIBRARY_PATH; a.out [~/test]$ gcc3 INT Now run with GCC 4.1.1 [~/test]$ more gcc4 rm -f a.out $/v4.1.1/bin/g++ -Wall temp.cpp LD_LIBRARY_PATH=/v4.1.1/lib:$LD_LIBRARY_PATH; a.out [EMAIL PROTECTED] ~/test]$ gcc4 T We can fix this particular example by moving void foo(const int& var) { std::cout << "INT" << std::endl; } to the top of the function. However, this won't work in more complex cases. -- Summary: GCC 4.1.1 has template bug Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: satyaakam at yahoo dot co dot in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31047