Ошибка проявляется только в GCC и
Comeau C++ Online.
Visual C++ 7.1 хавает код на ура.
template <typename X>
class A
{
public:
typedef X x_type;
};
template <typename X>
class B : public A<X>
{
typedef A<X> base_type;
//typedef typename base_type::x_type x_type; // С этим все компилируется
public:
B()
{
x_type x; // Comeau C++: error: identifier "x_type" is undefined
}
};
class C : public B<int>
{
public:
};
C g_c;
Почему так происходит, зачем стандарт требует ошибки в этом случае?
Ведь нет никакой двузначности и есть откуда взять всю необходимую информацию.
Как написать код так, что бы не писать в каждом наследуемом классе для каждого зависимого типа typedef?