Bon, j’ai un problème que je qualifierai de bizarre, voire même de douteux avec VS.NET 2003, que je n’avais pas avec VS.NET 2002. Je vous explique :
nRay.h(358) : error C2666: ‘CSSEFloat::operator`-’’ : 6 overloads have similar conversions
CSSEFloat.h(258): could be ‘CHPoint CSSEFloat::operator -(const CHPoint & const’
CSSEFloat.h(250): or ‘CVector CSSEFloat::operator -(const CVector & const’
CSSEFloat.h(242): or ‘CPoint CSSEFloat::operator -(const CPoint & const’
CSSEFloat.h(108): or ‘CSSEFloat CSSEFloat::operator -(const CSSEFloat & const’
CSSEFloat.h(91): or ‘CSSEFloat CSSEFloat::operator -(float)’
or ‘built-in C++ operator-(float, float)’
while trying to match the argument list ‘(CSSEFloat, const CSSEFloat)’
note: qualification adjustment (const/volatile) may be causing the ambiguity
Voila une erreur de compilation qui apparait dans VS.NET 2003, mais qui n’apparait pas dans VS.NET 2002. Le code incriminé est le suivant :
CSSEFloat a = 0;
CSSEFloat b = 1;
CSSEFloat c = 2;
a = b - c;
Et la, je comprends pas pourquoi il n’est pas foutu de comprendre qu’il a affaire à des CSSEFloat de toute part, et que l’opérateur ‘CSSEFloat CSSEFloat::operator -(const CSSEFloat & const’ semble de loin le plus indiqué pour réaliser l’opération demandée.
J’ai bien essayé de caster “en dur” en const référence, mais rien n’y fait, il n’arrive pas à lever l’ambiguité. Le même code passait sans aucun soucis sous le 2002.
(petit détail : il existe des opérateurs de cast pour CSSEFloat vers CHPoint, CPoint, CVector & consorts, mais c’est normal, je les utilise aussi, et le compilo devrait bien se rendre compte qu’il n’est question que de CSSEFloat dans mon exemple).
Bref, j’ai l’impression que la prise en charge de la norme C++ a pas mal changée entre le 2002 et le 2003, et ça, ça me chagrine beaucoup beaucoup, parce que je n’ai pas envie de devoir utiliser des immondices comme “a = b.Sub©;” pour remplacer mes jolis opérateurs. Donc si quelqu’un a une idée, je suis preneur
(Pour ceux qui se demandent, CSSEFloat est une classe de gestion d’un seul float, mais stocké dans un registre SSE, qui me permet de faire la passerelle avec mes vecteurs / points / hpoint en SSE eux aussi, et donc d’avoir encore plus d’opérations optimisées SSE tout en écrivant que du C++. Délire.)