Avec Visual Express
Pourquoi le code suivant code suivant compile:
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
27
28
class A
{
public:
   enum E_Enumeration{
      E_1,
      E_2,
      E_3
   };
   template<enum E_Enumeration> struct stTemplate{};
 
   template<> struct stTemplate<E_1>{typedef int Type;};
   template<> struct stTemplate<E_2>{typedef float Type;};
   template<> struct stTemplate<E_3>{typedef char Type;};
 
   template<enum E_Enumeration P_E>
   typename stTemplate<P_E>::Type Valeur()
   {
      return stTemplate<P_E>::Type();
   }
};
int main()
{
   A a;
   a.Valeur<A::E_1>();
   a.Valeur<A::E_2>();
   a.Valeur<A::E_3>();
   return 0;
}
Mais le code suivant ne compile pas:
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
27
28
29
enum E_Enumeration{
   E_1,
   E_2,
   E_3
};
template<enum E_Enumeration> struct stTemplate{};
 
template<> struct stTemplate<E_1>{typedef int Type;};
template<> struct stTemplate<E_2>{typedef float Type;};
template<> struct stTemplate<E_3>{typedef char Type;};
 
class A
{
public:
 
   template<enum E_Enumeration P_E>
   typename stTemplate<P_E>::Type Valeur()
   {
      return stTemplate<P_E>::Type();
   }
};
int main()
{
   A a;
   a.Valeur<E_1>();
   a.Valeur<E_2>();
   a.Valeur<E_3>();
   return 0;
}
J'ai toute une palanqué de
error C2440: 'specialization' : cannot convert from 'E_Enumeration' to 'E_Enumeration'
pour les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
template<> struct stTemplate<E_1>{typedef int Type;};
Nota: le code compile avec gcc (à un chouïa près).