Bonjour,

Petit problème de template (sous GCC4.4.5): comment spécialiser un constructeur de (re)copie pour pouvoir convertir une instanciation d'un type en un autre type ?

Je m'explique. Soit l'ECM suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
template <typename T>
struct A
{  T t; }
Comment écrire le constructeur de copie pour que le code suivant compile ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
int main()
{
	A<int>   a_int;
	A<float> a_float ( a_int );
}
J'ai tenté une spécialisation du constructeur de copie (qui au passage m'a obligé à déclarer aussi un constructeur explicite, je ne sais pas trop pourquoi...).
D'abord, le cas général:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <typename T>
struct A
{
	T t;
	A();
	A( const A& a );
};
template <typename T>
A<T>::A()
{}
 
template <typename T>
A<T>::A( const A<T>& a )
{ t = a.t; }
Mais pour la spécialisation, je vois vraiment pas comment faire...
Ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
template <>
A<float>::A( const A<int>& a )
{ t=(float)a.t; }
est refusé par gcc...
Bref, je patauge un peu...
Si vous aviez des idées ?