Gdzie i dlaczego muszę umieszczać słowa kluczowe „szablon” i „typename”?

W szablonach, gdzie i dlaczego muszę umieścić typenamei templatena nazwach zależnych? Czym właściwie są nazwy zależne? Mam następujący kod: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ... template<typename U> struct...