Onde e por que tenho que colocar as palavras-chave "modelo" e "nome do tipo"?

Em modelos, onde e por que eu tenho que colocar typenamee templatesobre os nomes dos dependentes? Quais são exatamente os nomes dependentes, afinal? Eu tenho o seguinte código: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ......