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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.