04.10.2012, 21:10, "Yang Chen" <[email protected]>:
> OK, I see the reason that I disabled templates here. RemoveBaseClass
> works in a naive way:
> - put all members of a base class to one of its directly derived class;
> - remove the base class;
> - if the base class has more directly derived classes, then the
> previously selected derived class becomes the new base class for those;
>
> Then let's say we have code like below:
>
> class A {}
> class B : A {}
> class C : A {}
>
> After the transformation, we will have:
> class B {}
> class C : B {}
>
> Now if B is a template class, RemoveBaseClass will generate incompilable
> code like this:
>
> template <class T> class B {};
> class C : public B {};
>
> Note that this is just a design choice because RemoveBaseClass doesn't
> have sufficient analysis on class hierarchies. If a base class A have a
> single derived class, it should be remove even if the derived class is a
> template. I will add it into my TODO.
Have you seen my test case? It deals with quite different situation:
class A {};
template <class T> class B : A {};
and pass should eliminate A.
And AFAIU, CXXRD in code represents B, not A. Experiment proves it.
--
Regards,
Konstantin