Extériorisation d'une fonction template d'une struct template
	
	
		Bonjour, voici le Toy code
	Code:
	
| 12
 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:
	
| 12
 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 ;)