Constructeur de copie sans "const"
	
	
		Bonjour
En testant certains points des constructeurs de copie je suis tombé sur un petit mystère:
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | class A {
  int value;
public:
  A(int i) { 
    value = i; 
    cout << "A(int)" << endl; 
  }
  A(A& other) {  // const volontairement absent
   value = other.value;
   cout << "A(A&)" << endl; 
  }
};
 
A a1(1), a2(a1); // ok
A a3(*(new A(3))); // ok
A a4(A(4)); // ne compile pas | 
 J'ai compilé en -fno-elide-constructors sous g++ 3.3.3 pour être bien sûr de voir passer toutes les copies avant que le compilateur ne s'amuse à les optimiser.
Le message d'erreur est:
	Code:
	
| 12
 3
 
 | error: no matching function for call to 'A::A(A)'
error: candidates are: A::A(int)
error:                 A::A(A&) | 
 Si je modifie le constructeur de copie en A(const A& other) le code compile et produit bien le résultat attendu (A(int), A(const A&) et a4.value = 4 au final).
Je suis perplexe... Quelqu'un peut expliquer pourquoi?