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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.