Dans l'exemple précédent, la fonction carre
ne sera compilée que pour les valeurs de T
pour lesquelles elle est effectivement appelée dans le programme. Ainsi, si
elle n'est jamais appelée, elle ne sera pas compilée du tout, et si elle
est appelée avec seulement les types int
et float
, elle ne
sera compilée que pour ces deux types, et pas pour le type double
par exemple. Par conséquent, il n'y aura pas de problème s'il existe un
type particulier pour lequel l'opérateur *
n'existe pas (alors qu'il
est appelé dans la fonction carre
) du moment que la fonction
carre
n'est jamais appelée sur une variable de ce type-là.
Note pour la compilation: comme les fonction templatées ne sont compilées que pour les types pour lesquels elles sont effectivement appelées, si votre programme est divisé en plusieurs fichiers compilés séparément, il faudra faire attention à mettre les définitions des fonctions templatées dans des .h et non pas dans des .cpp.