[template] Problème ésotérique
Bonjour,
Je me suis trouvé face à un problème dans du code.
J'ai réussi à le simplifier à maximum.
Voici le code :
Test.cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| namespace Bar
{
template <class T2>
T2 f()
{
return T2(0);
}
}
void Foo1(float y = Bar::f<float>())
{
}
template <class T>
void Foo2(float y = Bar::f<float>()) // Ici
{
}
int main()
{
Foo1();
Foo2<int>();
return 0;
} |
Ca compil avec gcc.
Ca ne compil pas avec visual studio 2008 et l'erreur est la suivante sur la ligne avec un commentaire
error C2783: 'T2 Bar::f(void)' : could not deduce template argument for 'T2'
[Edit] Ca ne compil pas non plus avec Visual studio 2005 [/Edit]
Où est mon problème ?
Sachant que :
Si je mets un float en argument de Foo2 ça compil.
Si je retire le namespace ça compil.
Merci.