Où et pourquoi dois-je mettre le “modèle” et “typename” de mots-clés?

Dans les modèles, où et pourquoi dois-je mettre typename et template sur dépendante des noms? Qu'est-ce exactement sont dépendants des noms de toute façon? J'ai le code suivant:

template <typename T, typename Tail> //Tail will be a UnionNode too.
struct UnionNode : public Tail {
    //...
    template<typename U> struct inUnion {
        //Q: where to add typename/template here?
        typedef Tail::inUnion<U> dummy; 
    };
    template< > struct inUnion<T> {
    };
};
template <typename T> //For the last node Tn.
struct UnionNode<T, void> {
    //...
    template<typename U> struct inUnion {
        char fail[ -2 + (sizeof(U)%2) ]; //Cannot be instantiated for any U
    };
    template< > struct inUnion<T> {
    };
};

Le problème que j'ai est dans le typedef Tail::inUnion<U> dummy ligne. Je suis assez certain que inUnion est une personne à charge nom et VC++ est tout à fait juste en étouffer. Je sais aussi que je devrais être en mesure d'ajouter template quelque part pour indiquer au compilateur que inUnion est un modèle-id. Mais où exactement? Et faut-il alors supposer que inUnion est un modèle de classe, c'est à dire inUnion<U> le nom d'un type et non pas une fonction?

Ennuyeux question: pourquoi ne pas boost::Variant?
Sensibilités politiques, de la portabilité.
J'ai fait votre question réelle ("Où mettre template/typename?") se démarquer de mieux en mettant la dernière question et le code au début et à raccourcir le code horizontalement pour s'adapter à un 1024x écran.
Suppression de "l'dépendant de noms" dans le titre, car il semble que la plupart des gens qui s'interrogent sur "typename" et "modèle" ne sait pas ce que "dépendante" de noms. Il devrait être moins compliqué de cette façon.
boost est tout à fait portable. Je dirais que la seule politique est la raison pour laquelle pourquoi boost est souvent unembraced. La seule bonne raison que je sais c'est l'augmentation du temps de compilation. Sinon, c'est tout sur la perte de milliers de dollars de réinventer la roue.

OriginalL'auteur MSalters | 2009-03-04