struct foo { int x; int y; };
which is easy to parse. Then came typedef. With user-defined types, foo*bar;
isn't parseable with a LALR(1) parser until you've seen the definition of "foo".
Even the ordinary case foo bar;
needs more than one lookahead to parse.
This is a headache for compilers, and a huge headache for anything that wants to work on single source files without seeing the included files.It's a big win if files are parseable without their dependencies. The Pascal/Modula/Ada family all are. I think Go is. Not sure about Rust, but it probably is. C and C++, no.
(The hacks for template syntax in C++ are painful to think about.)