Je le code suivant:Conteneur de classe modèle avec problème de conversion automatique
#include <vector>
template<int Wt = 0>
class fixed {
public:
explicit fixed(double val = 0) {
operator=(val);
}
~fixed(){}
operator double() const {
return v_;
}
double operator =(const double &d){
if (d>Wt)
v_ = Wt;
else
v_ = d;
return v_;
}
private:
double v_;
};
int main(){
fixed<5> x;
std::vector<fixed<6> > v(5);
//std::vector<fixed<6> > v(5,0);
//fixed<6> y;
//v[0] = 0;
x = x*v[0];
}
Compiler dans VS 2005 Express et 2010 Express donne l'erreur suivante:
error C2676: binary '*' : 'fixed' does not define this operator or a conversion to a type acceptable to the predefined operator
Si je décommenter l'un des trois lignes dans le principal (commentant le vecteur supplémentaire), il compilera. Si j'utilise gcc, il va compiler. Quelqu'un peut-il donner un indice pour expliquer pourquoi?
Le code est une version simplifiée d'un plus grand projet donc les trois solutions ne sont malheureusement pas des options pour moi.
J'ai essayé était Qt qui utilise gcc, mais devinez qu'il n'a pas les mêmes en-têtes. J'ai signalé le bogue: https://connect.microsoft.com/VisualStudio/feedback/details/637760/container-of-template-class-with-automatic-conversion-problem –