This document in its section 2.6 Computed Includes has the following paragraph:
If the line expands to a token stream beginning with a < token and including a > token, then the tokens between the < and the first > are combined to form the filename to be included. Any whitespace between tokens is reduced to a single space; then any space after the initial < is retained, but a trailing space before the closing > is ignored. CPP searches for the file according to the rules for angle-bracket includes.
I know this is implementation defined, but why does it have to be this way for GCC? I'm referring specifically to the highlighted sentence above.