Bonjour,
Mon problème est à priori simple, si tant est qu'il ait une solution.
L'exemple qui suit n'est pas mon problème mais c'est le même raisonnement.

A partir de ces deux fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
template <class T> inline float Sin(T a) { return sinf(a); } //fonction 1 renvoyant un float
template <class T> inline double Sin(T a) { return sin(a); } //fonction 2 renvoyant un double
Je veux trouver ces appelles à la compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
float fa = Math::Sin((double)1.0); //Utilisation de la fonction 1
float fb = Math::Sin((float)1.0); //Utilisation de la fonction 1
double da = Math::Sin((double)1.0); //Utilisation de la fonction 2
double db = Math::Sin((float)1.0); //Utilisation de la fonction 2
Mais l'ennuie c'est que le compilateur trouve une ambiguïté du à "l'autocasting" (coercition ?) float -> double, double -> float.

Il n'y aurait pas une solution simple et propre de clarifier ça pour le compilateur ? Merci.