See https://reviews.llvm.org/D130626 for motivation.
Identifier in the grammar has different categories (type-name, template-name, namespace-name), they requires semantic information to resolve.
This patch is to eliminate the "local" ambiguities in type-name, and namespace-name, which gives us a performance boost of the parser:
- eliminate all different type rules (class-name, enum-name, typedef-name), fold them into a unified type-name, this removes the #1 type-name ambiguity, and gives us a big performance boost;
- remove the namespace-alis rules, as they're hard and uninteresting;
Note that we could eliminate more and gain more performance (like fold template-name, type-name, namespace together), but at current stage, we'd like keep all existing categories of the identifier (as they might assist in correlated disambiguation & keep the representation of important concepts uniform).
Maybe "we don't distinguish between namespaces and namespace aliases, as it's hard and uninteresting"?