This is the remainder of the legacy of C ++ C. The C-grammar is (almost) LALR (1) and therefore uses left recursion as much as possible. The C ++ grammar no longer confuses LALR, but many of the rules are still written in the form that the LALR parser prefers because there is no reason to change them - any parsing algorithm powerful enough to handle C ++ does not care what type syntax recursion is used.