Le compilateur ne renvoie pas de lvalue error pour des complexes
Bonjour,
j'ai un probleme bete, c'est que les compilateurs que j'ai (icc, g++) ne disent rien lorsqu'une valeur complexe est utilisee comme lvalue. Alors qu'il genere bien une erreur pour les doubles, il ne dit rien pour les complexes. Y-a t'il une option de compilation qui permettrait au compilateur de signaler cette erreur ?
Voici l'exemple qui compile (alors qu'il ne devrait pas) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <complex>
#include <iostream>
#include <vector>
using namespace std;
template<class T>
class Vector
{
protected :
vector<T> data_;
public :
Vector(int n) : data_(n)
{
}
T operator()(int i) const
{
return data_[i];
}
};
int main()
{
int n = 10;
//Vector<double> x(n);
//x(0) = 1.3;
Vector<complex<double> > x(n);
x(0) = complex<double>(1.3, 4.5);
return 0;
} |
Si vous decommentez les lignes pour double (et commentez celles avec complex<double> ), vous verrez que ca genere bien l'erreur souhaitee a la compilation.
Je precise que je veux implementer un operateur () const qui renvoie une valeur et pas une reference, et je voudrais que le compilo signale les endroits ou ya x(i) = quelque chose.