У меня есть следующий код:Контейнер шаблонного класса с проблемой автоматического преобразования
#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];
}
Компиляция в VS 2005 Экспресс и 2010 экспресс дает следующее сообщение об ошибке:
error C2676: binary '*' : 'fixed' does not define this operator or a conversion to a type acceptable to the predefined operator
Если я раскомментировать любое из три строки в главном (комментируя дополнительный вектор), он будет компилироваться. Если я использую gcc, он будет компилироваться. Может кто-нибудь дать подсказку, почему это так?
Код - упрощенная версия более крупного проекта, поэтому три решения, к сожалению, не являются параметрами для меня.
Окружающая среда Я пытался использовать Qt, который использует gcc, но думаю, что у него нет одинаковых заголовков. Я сообщил об ошибке: https://connect.microsoft.com/VisualStudio/feedback/details/637760/container-of-template-class-with-automatic-conversion-problem –