L'incapacité du compilateur à déduire les arguments de modèle à partir des arguments de fonction par défaut dans le code fourni peut être attribuée aux stipulations du C spécification du langage.
En C 03, comme cité au §14.8.2/17 de la spécification, "Un paramètre de type de modèle ne peut pas être déduit du type d'un argument par défaut de fonction." Cette restriction interdit explicitement l'utilisation d'arguments par défaut pour la déduction des paramètres de modèle.
Bien que C 11 ait introduit la possibilité de spécifier des arguments de modèle par défaut pour les modèles de fonction, l'argument de fonction par défaut n'est toujours pas utilisable pour la déduction des arguments de modèle. Plus précisément, C 11 §14.8.2.5/5 indique que « Les contextes non déduits sont : ... Un paramètre de modèle utilisé dans le type de paramètre d'un paramètre de fonction qui a un argument par défaut qui est utilisé dans l'appel pour lequel argument la déduction est en cours."
Par conséquent, l'incapacité du code fourni à déduire le paramètre de modèle pour T à partir de l'argument par défaut 0.0f est cohérente avec la spécification du langage. Pour résoudre le problème, un argument de modèle explicite doit être fourni lors de l'appel de la fonction bar, comme démontré dans le code révisé suivant :
a.bar<float>(5);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!