That's a rather negative way of putting things, which is a bit indefinite
and wishy-washy. You could instead try to specify which tokens should get
font-lock-type-face and which shouldn't, thus giving something concrete
to discuss. I think this will be difficult to do well, and may lead to
the result which I alluded to above.
It has to be said also that C/C++ is quite unusual in that knowing which
identifier is a type is necessary for correct parsing. If it weren't
so, we could reliably highlight types not based on their name but based
on their location in the syntax.
I think an approach like that of tree-sitter should be able (at least in
theory) to give reasonably good highlighting of types based on their
position (tho sadly not in those cases where the syntax is ambiguous).