Spécialisation de template parametre avec Enum
Avec Visual Express
Pourquoi le code suivant code suivant compile:
Code:
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:
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
Citation:
error C2440: 'specialization' : cannot convert from 'E_Enumeration' to 'E_Enumeration'
pour les lignes
Code:
template<> struct stTemplate<E_1>{typedef int Type;};
Nota: le code compile avec gcc (à un chouïa près).