Bonjour a tous !
Je me trouve face a un probleme lors de la specialisation d'un template lorsque celui ci est contenu dans un autre template.
Code :
- template <class T> struct Container
- {
- typedef T TypeData;
- template <TypeData data> struct elem
- {
- static const TypeData ElemData = data;
- };
- template <class test_elem> struct test
- { typedef elem<0> result; };
- template <TypeData data> struct test<elem<data> >
- { typedef elem<data> result; };
- typedef typename test<elem<5> >::result ContResult;
- };
- struct ContainerUInt
- {
- typedef unsigned int TypeData;
- template <TypeData data> struct elem
- {
- static const TypeData ElemData = data;
- };
- template <class test_elem> struct test
- { typedef elem<0> result; };
- template <TypeData data> struct test<elem<data> >
- { typedef elem<data> result; };
- typedef test<elem<5> >::result ContResult;
- };
- int main(void)
- {
- cout << Container<unsigned int>::ContResult::ElemData << endl;
- cout << ContainerUInt::ContResult::ElemData << endl;
- return 0;
- }
|
La sortie est :
Dans le template Container<T> la specialization de test<test_elem> est ignoree est la valeure de ContResult est alors 0.
Par contre si je specialise "a la main" ContainerT en ContainerUInt la valeur est bien 5.
Quelqu'un aurait-il une explication ?
Le resultat est obtenu avec VC++ 8.