Bonjour

Je ne vois pas du tout pourquoi le code suivant ne peut pas fonctionner:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
template< class T > T check( T );
template< class S > void watch( S (*)(S) );
watch( check );     //error
Autant je comprendrais pourquoi ce code ne peut pas fonctionner:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
template< class T > T check( T );
template< class S > void watch( int (*)(S) );
watch( check );     //error
car dans ce cas, on a une fonction qui renvoie un int et qui prend un argument de type S, alors que check renvoie et prend un argument de même type (et encore, le compilateur pourrait automatiquement transformer S en int).
Le compilateur renvoie comme erreur:
no instance of function template matches the argument list.


Mais je ne vois pas du tout pourquoi.

Merci