Hi, all. I encounter a compiler error in gcc 3.4. Is there anyone encounter the some situation. And why ??? ///////////////////////////////////// #include <iostream> using namespace std;
#define INT_ID 1 #define FLOAT_ID 2 #define CHAR_ID 3 template<int tid> struct Tid2T{}; #define TID2T_HELPER(id, type)\ template<>\ struct Tid2T<id>{\ typedef type TyT;\ }; TID2T_HELPER(INT_ID, int) TID2T_HELPER(FLOAT_ID, float) TID2T_HELPER(CHAR_ID, char) template<int tid> class TS{ public: typename Tid2T<tid>::TyT m_i; TS(typename Tid2T<tid>::TyT val):TS_ID(tid){ m_i = val; } const int TS_ID; }; template<typename Elt> class TV; // //If i define the default value here, then the program will be ok. // template<typename Elt> void fn(const TV<Elt>& v1, const Elt& s1/*=Elt(0)*/); template<typename Elt> class TV{ public: TV(const Elt& e):TV_TS_ID(e.TS_ID){ } const int TV_TS_ID; }; // //If i define the default value here, then the compiler error will appear // template<typename Elt> void fn(const TV<Elt>& v1, const Elt& s1 = Elt(0)) { cout<<"TV_TS_ID="<<v1.TV_TS_ID<<" TS_ID="<<s1.TS_ID<<endl; } template<typename T> void tryfn() { T e1(1); TV<T> v1(e1); //the following calling is error //why??? fn(v1); //the following calling is ok //fn(v1, e1); } int main() { tryfn< TS<INT_ID> >(); tryfn< TS<FLOAT_ID> >(); tryfn< TS<CHAR_ID> >(); return 0; } //////////////////////// ////// Compiling source file(s)... 1.cpp 1.cpp: In function `void tryfn() [with T = TS<1>]': 1.cpp:74: instantiated from here 1.cpp:63: error: no matching function for call to `fn(TV<TS<1> >&)' 1.cpp: In function `void tryfn() [with T = TS<2>]': 1.cpp:75: instantiated from here 1.cpp:63: error: no matching function for call to `fn(TV<TS<2> >&)' 1.cpp: In function `void tryfn() [with T = TS<3>]': 1.cpp:76: instantiated from here 1.cpp:63: error: no matching function for call to `fn(TV<TS<3> >&)' _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus