Or do I have to force C to be defined outside of B?
Yes, unfortunately you have to do this. Usually you can define a template class before A
and specialize it for B
, containing the C
type. This allows you to use it in A
.
template<typename T>
struct members;
template<class Derived>
class A {
typedef typename members<Derived>::C D;
D x;
};
template<>
struct members<class B> {
class C { };
};
class B : public A<B> {
public:
};