В шаблонах, где и зачем мне помещать typename
и template
в зависимые имена? Что же такое имена зависимых? У меня есть следующий код:
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> {
};
};
Проблема, которая у меня есть, находится в строке typedef Tail::inUnion<U> dummy
. Я вполне уверен, что inUnion
является зависимым именем, а VС++ совершенно прав. Я также знаю, что я должен добавить template
где-нибудь, чтобы сообщить компилятору, что inUnion является идентификатором шаблона. Но где именно? И следует ли тогда предположить, что inUnion является шаблоном класса, то есть inUnion<U>
называет тип, а не функцию?