A preprocessing token is the minimal lexical element of the language in translation
phases 3 through 6
. The categories of preprocessing token are: header names,
placeholder tokens produced by preprocessing
import and
module directives
(
import-keyword,
module-keyword, and
export-keyword),
identifiers, preprocessing numbers, character literals (including user-defined character
literals), string literals (including user-defined string literals), preprocessing
operators and punctuators, and single non-whitespace characters that do not lexically
match the other preprocessing token categories
. If a
' or a
" character
matches the last category, the behavior is undefined
. Preprocessing tokens can be
separated by
whitespace;
this consists of comments (
[lex.comment]), or whitespace
characters (space, horizontal tab, new-line, vertical tab, and
form-feed), or both
. As described in
[cpp], in certain
circumstances during translation phase 4, whitespace (or the absence
thereof) serves as more than preprocessing token separation
. White space
can appear within a preprocessing token only as part of a header name or
between the quotation characters in a character literal or
string literal
.