Bonjour à tous,

Je ne m'explique pas ce problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
template<class T1, class T2>
class C
{
public:
    typedef T1 (*Fptr)(void); //La ligne importante
    Fptr fptr;
};
 
int main()
{
    C<void,void> c;
    return 0;
}
(Je sais que je n'utilise pas T2 pour l'instant).
Ce code fonctionne parfaitement. En revanche:

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
 
template<class T1, class T2>
class C
{
public:
    //T2 à la place de void pour le type de l'argument
    typedef T1 (*Fptr)(T2); //invalid parameter type `void'
    Fptr fptr; //invalid parameter type `void'
};
 
int main()
{
    C<void,void> c;
    return 0;
}
Ce code ne fonctionne pas, j'ai mis les erreurs en face des lignes que le compilateur incrimine.

C'est peut-être tout bête, mais j'aimerais savoir la subtilité qui empeche la 2ème version de fonctionner -_-'

Merci d'avance de votre aide...