I wonder what the train-track diagram for C++ would look like...
Deciding on syntax is Turing complete in C++. (Even in Pascal, you still need to check that you only used identifiers you declared before. That's not expressed in this diagram. But the extra rules required to get to the full language's syntax are fairly tame compared to C++.)
Syntax is Turing complete, and hence undecidable, in C++, because what's valid syntax depends on types in some instances, and the type system is Turing complete.
See eg https://medium.com/@mujjingun_23509/full-proof-that-c-gramma... or https://stackoverflow.com/questions/794015/what-do-people-me...