“that’s an addition expression, not the size of a cast expression.”

The operand of sizeof is either a unary expression or a parenthesized type name, and the parser cannot tell which until it has already committed. Compound literals make it worse. The obvious optimization, folding unary and cast parsing into one function to skip backtracking, is exactly the thing that breaks it. Fifty years in, the most-used systems language still has a grammar ambiguity that every compiler has to special-case.