Issue description: [cpp.pre] defines the grammar production preprocessing-file but nothing in the standard specifies that a translation unit is ill-formed if it fails to match that grammar. Similarly, translation-unit has no normative effect.
Suggested resolution: Edit [lex.phases]/1.4:
The source file is analyzed as a preprocessing-file ([cpp.pre]). Preprocessing directives are executed, macro invocations are expanded, and _Pragma unary operator expressions are executed. A #include preprocessing directive causes the named header or source file to be processed from phase 1 through phase 4, recursively. All preprocessing directives are then deleted.
Edit [lex.phases]/1.7:
Whitespace characters separating tokens are no longer significant. Each preprocessing token is converted into a token ([lex.token]). The resulting tokens constitute a translation unit and are syntactically and semantically analyzed as a translation-unit ([basic.link]) and translated. [...]
Full name of submitter: Brian Bi
Reference (section label): [lex.phases]
Issue description: [cpp.pre] defines the grammar production preprocessing-file but nothing in the standard specifies that a translation unit is ill-formed if it fails to match that grammar. Similarly, translation-unit has no normative effect.
Suggested resolution: Edit [lex.phases]/1.4:
Edit [lex.phases]/1.7: