Déduire un type de retour de pointeur de fonction

Je pense que le code illustrera mieux mon besoin:

template  struct return_type { typedef ??? type; }; 

pour que:

 return_type::type -> int return_type::type -> void 

Je connais decltype et result_of mais ils doivent avoir des arguments passés. Je veux déduire le type de retour d’un pointeur de fonction à partir d’un paramètre de modèle unique. Je ne peux pas append le type de retour en tant que paramètre, car c’est exactement ce que je veux masquer ici …

Je sais qu’il existe une solution en boost, mais je ne peux pas l’utiliser, et une tentative de le sortir de boost a abouti à un échec spectaculaire (comme c’est souvent le cas).

Les solutions C ++ 11 sont les bienvenues (dans la mesure où elles sont sockets en charge par VS2012).

Si vous pouvez utiliser des modèles variadiques (novembre ’12 CTP), cela devrait fonctionner:

 template  struct return_type; template  struct return_type { typedef R type; }; 

Exemple en direct .

Si vous ne pouvez pas utiliser de modèles variadiques, vous devrez fournir des spécialisations spécifiques pour les parameters 0, 1, 2, … (à la main ou générés par le préprocesseur).

MODIFIER

Comme indiqué dans les commentaires, si vous souhaitez également utiliser des fonctions variadiques, vous devez append une spécialisation partielle supplémentaire (ou une pour chaque compte de parameters dans le cas des modèles non variadiques):

 template  struct return_type { typedef R type; };