This is just a kernel of an idea.  It addresses a problem on which I have "subbed my toe" many, many times, namely that forward declarations do not express the inheritance hierarchy.  This issue is significant enough that the Google C++ style guide advices against using forward declarations:

Pros:Cons:         // b.h:
         struct B {};
         struct D : B {};
         // good_user.cc:
         #include "b.h"
         void f(B*);
         void f(void*);
         void test(D* x) { f(x); } // calls f(B*)
 
          If the #include was replaced with forward decls for B and D, test() would call f(void*).

The cited problem would disappear if struct D's forward declaration were allowed to include its base class:

struct D : B;

I am not enough of a language lawyer to know why this would not work and whether it might have problems in the presence of multiple base classes.

/john