Bonjour, voici le Toy code

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
struct Y{ static int F() { return 10;} };
 
template < class T >
struct R{
	template <int m>  int F(void);
	template<>         int F<2>(void){return 6+T::F(); }
};
 
template < class T >
template <int m> int R<T>::F(void){
	return m + T::F();
}
int _tmain(int argc, _TCHAR* argv[]){
 
R<Y> r;
b= r.F<2>();
b= r.F<3>();
 
return 0;
}

Je suis parvenu à écrire le corps générique de F hors de la struct R.
Je ne parviens à faire de même avec la specialisation m=2.

la solution suivante est un echec

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
struct Y{ static int F() { return 10;} };
 
template < class T >
struct R{
	template <int m>  int F(void);
	template<>		  int F<2>(void);
};
 
template < class T >
template <int m> int R<T>::F(void){
	return m + T::F();
}
 
template<>
template < class T >
int R<T>::F<2>(void){
	return 20 + T::F();
}

J 'ai du mal à saisir pourquoi, si vous avez une suggestion