[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
a compiler error in template function default argument value
From: |
kuangye |
Subject: |
a compiler error in template function default argument value |
Date: |
Wed, 9 Apr 2008 18:45:59 -0700 (PDT) |
User-agent: |
G2/1.0 |
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> >&)'
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- a compiler error in template function default argument value,
kuangye <=