Re: function template specialization used with default parameter
Leandro Melo wrote:
On 7 jan, 11:57, Peter K?mmel <syntheti...@gmx.net> wrote:
What's wrong with this code:
template<typename T>
void foo(T * = 0) {}
template<>
void foo<int>(int*) {}
void fo(){
foo<int>();
}
MSVC couldn't convert the default parameter from T* to int*.
A compiler bug?
The code below compiled (and ran) fine with GCC 4.1.2 (from codepad)
and MSVC 2002 (the version I have hands-on right now). It also
compiled fine in comeau online. Which version of MSVC are you using?
template<typename T>
void foo(T * = 0){std::cout << "T";}
template<>
void foo<int>(int*){std::cout << "int";}
int main()
{
foo<int>();
}
So, which one would be used? BTW, VC++ 2008 (v14 I guess) complains
about conversion from T* to int*. Adding (T*) in front of the 0 fixes
it (as Michael DOUBEZ suggested). And it outputs 'int', not 'T', which
is a bit perplexing -- how does the default argument in the original
template get applied in the specialisation? If the specialisation is to
be called, the the argument is missing, isn't it?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask