Hello ,

En compilant ce code sous visual (testé sous VC6, VS2005 et VC++2008 express) j'obtiens une erreur précisant que le paramètre template C de la fonction test(...) ne peux pas être déduit. Pourtant je précise explicitement test<T>, donc il ne devrait pas y avoir de processus de déduction...
Comeau online me dit ok. Donc c'est une bourde de Visual ?

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
template<typename T> 
class IsClassT 
{ 
  private: 
    typedef char One; 
    typedef struct { char a[2]; } Two; 
    template<typename C> static One test(int C::*); 
    template<typename C> static Two test(...); 
  public: 
      enum { Yes = sizeof(IsClassT<T>::test<T>(0)) == 1 }; 
      enum { No = !Yes }; 
}; 
 
 
int main()
{
 
    int i = IsClassT< IsClassT<int> >::Yes;
 
    return 0;
}