Meta-programation, template et cast implicite
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:
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:
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.