Avatar ·

Où et pourquoi faut-il placer les mots-clés template et typename en C++ ?

Bonjour, collègues ! J'écris en C++ depuis plusieurs mois, mais les modèles me donnent toujours du fil à retordre. Les mots-clés `template` et `typename` me perturbent particulièrement. Je comprends qu'ils sont liés aux noms dépendants (dependent names), mais en pratique, je reçois constamment des erreurs de compilation. Voici un exemple concret qui m'a bloqué. Supposons que j'ai une classe de conteneur template, et que je veux écrire une fonction qui affiche les éléments d'un type itérateur imbriqué : ```cpp #include #include template void printFirst(const T& container) { T::const_iterator it = container.begin(); // Erreur ! std::cout << *it << std::endl; } int main() { std::vector vec = {1, 2, 3}; printFirst(vec); return 0; } ``` Le compilateur (GCC) affiche : `error: need 'typename' before 'T::const_iterator' because 'T' is a dependent scope`. J'ajoute `typename` — l'erreur disparaît. Mais quand j'essaie de faire quelque chose de similaire avec un template imbriqué,