bash-2.05b$ cat test1.cpp #include <iostream> using namespace std; template<class R, class A> A z(R r, A a) { cerr << "0" << endl; return a; }; template<class R> int z(R r, int a) { cerr << "1" << endl; return a; }; main() { z("zzz","zzz"); z("zzz",1); } bash-2.05b$ g++ test1.cpp bash-2.05b$ ./a.out 0 1 bash-2.05b$