Did anyone ever write out a/the type system for C++ ?

Although I am sure there are a lot of groans along the way,
it would be a useful service if someone would write out 
the type system for C++ as a set of typing rules, subtype
rules, and whatever other hocus pocus is needed to say
what's really going on. Has anyone done this for an
interesting subset of C++?

At the moment, I am particularly interested in how

   class B : public A { ... }

does (and does not) cause B to be treated as a subtype of A.
In particular, it appears that B <: A follows for r-values
but not for l-values. This makes sense of course, but the 
details of how this is applied in type checking look fairly
tricky. In addition B* <: A*, but not B** <: A**, and other
fun stuff.

John Mitchell