Hi, ashwinipahuja
Remember the last problem you had with typedefs ...
Code:
template <typename A, typename B, typename C , typename D >
class Myclass
{
public:
typedef typename D MyType;
};
Where you don't want typename because it is already explicit as a template parameter?
Good.
This time you need to use typename.
In your example, there is no way to know whether DB::i is this
Code:
class DB
{
int i;
}
... OR ...
Code:
class DB
{
typedef int i;
}
Therefore you need to tell the compiler that i is in fact a type and not a value using the typename keyword.
Here is a complete example:
Code:
template<typename A>
class AClass
{
public:
typedef A value_type; // NO typename KEYWORD
value_type i;
};
template<typename B>
class BClass
{
public:
typedef typename B::value_type val; // WE NEED typename HERE
};
int main ()
{
AClass<int> a;
BClass<AClass<int> > b;
}