У меня есть следующий код:
#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 Express и 2010 Express выдает следующую ошибку:
ошибка C2676: двоичный файл '*': 'исправлен'
не определяет этот оператор или
преобразование в тип, приемлемый для
предопределенный оператор
Если я раскомментирую любую из трех строк в главной (комментируя дополнительный вектор), она скомпилируется. Если я использую gcc, он скомпилируется. Кто-нибудь может дать подсказку, почему это так?
Код является упрощенной версией более крупного проекта, поэтому, к сожалению, эти три решения для меня не подходят.