Voici un autre 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
21
22
23
24
25
26
 
 
struct A{ 
	int F (){ return 1; } 
};
 
template<bool ,class> struct enable_if{};
template<class T> struct enable_if<true,T>{typedef T type;};
 
template< class T,int n=3> 
struct H{
	template<int m>
	int h () 
	{
		typedef typename enable_if< m<=n ,H>::type check_type;
		T a; return a.F();
   }
};
 
int main()
{
	H<A > u_a;
	int t = u_a.h<1>();
 	//t = u_a.h<6>();
	return 0;
}
Grace a ce que vous m'avez appris je permet un erreur de compilation si m> n ( ligne en commentaire).
Cependant si j essoie de rentrer la definition de enable à l interieur de la fonction h:

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
 
struct A{ 
	int F (){ return 1; } 
};
 
template< class T,int n=3> 
struct H{
	template<int m>
	int h () 
	{
		template<bool ,class> struct enable_if{};
		template<class T> struct enable_if<true,T>{typedef T type;};
		typedef typename enable_if< m<=n ,H>::type check_type;
		T a; return a.F();
   }
};

Ca provoque une erreur C2951. J ai appiqué ce qui est recommandé par le message d erreur mais ca ne marche pas mieux!

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
 
struct A{ 
	int F (){ return 1; } 
};
 
template< class T,int n=3> 
struct H{
	template<int m>
	int h () 
	{
		generic<bool ,class> ref struct enable_if{};
		generic<class T> ref struct enable_if<true,T>{typedef T type;};
		typedef typename enable_if< m<=n ,H>::type check_type;
		T a; return a.F();
   }
};
Je dois certainement mal m y prendre n est ce pas?