Avatar ·

Quelle est la différence entre typename et class lors de la déclaration des paramètres de template en C++ ?

Bonjour ! Je suis un développeur C++ débutant et j'essaie de comprendre les templates. J'ai remarqué que lors de la déclaration des paramètres de template, on peut utiliser à la fois le mot-clé `typename` et `class`. Par exemple : ```cpp template void foo(T t) { } template void bar(T t) { } ``` Les deux variantes se compilent et fonctionnent de la même manière. Cela me perturbe. Pourquoi deux mots-clés différents pour le même objectif ? Y a-t-il une quelconque différence entre eux ? J'ai entendu dire que dans certains contextes, par exemple avec les types dépendants imbriqués, `typename` est obligatoire et `class` ne convient pas. Est-ce vrai ? Ou est-ce simplement un vestige historique ? Expliquez-moi en détail, s'il vous plaît, pour que je comprenne enfin quand utiliser quoi. Les exemples de code sont les bienvenus. Merci d'avance ! <<>>

Réponse courte : c'est historique, mais il y a des nuances importantes

En réalité, dans 99% des cas, lors de la déclaration d'un paramètre de template, les mots-clés type