Où et pourquoi dois-je mettre les mots-clés «modèle» et «nom de type»?

Dans les modèles, où et pourquoi dois-je mettre typenameet templatesur les noms dépendants? Quels sont exactement les noms dépendants de toute façon? J'ai le code suivant: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ......