Une classe template dans une autre classe template et ordre de déclaration des éléments
	
	
		Bonjour à tous,
quand j'écris :
	Code:
	
| 12
 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
 30
 31
 32
 
 |  
template<typename PTYPE, int DIM>
  class PairSingInfo{
 
// des trucs
 
   void initializeOXYZ()
   {
      return InitializeOXYZ_impl<PTYPE,DIM>::initializeOXYZ(*this);
   }
 
  friend struct InitializeOXYZ_impl<PTYPE,DIM>;
 
//d'autres trucs
};
 
template<typename PTYPE, int DIM>
struct InitializeOXYZ_impl{};
 
template<typename PTYPE>
struct InitializeOXYZ_impl<PTYPE,2>{
  void initializeOXYZ(PairSingInfo<PTYPE,2>& p){
//des trucs
  }
};
 
template<typename PTYPE>
struct InitializeOXYZ_impl<PTYPE,3>{
  void initializeOXYZ(PairSingInfo<PTYPE,3>& p){
//des trucs
  }
}; | 
 j'obtiens l'erreur "error: ‘InitializeOXYZ_impl’ is not a class template". Cette erreur n'est pas difficile à régler : il suffit de mettre le morceau de code 
	Code:
	
| 12
 3
 
 |  
template<typename PTYPE, int DIM>
struct InitializeOXYZ_impl{}; | 
 au début. Mais pourquoi ? Le code, par exemple, se fiche que la fonction membre initializeOXYZ(PairSingInfo<PTYPE,3>& p)  de InitializeOXYZ_impl soit déclarée après la déclaration de PairSingInfo ... ?