Prior to evaluation,
macro invocations in the list of preprocessing tokens
that will become the controlling constant expression
are replaced
(except for those macro names modified by the
defined
unary operator),
just as in normal text
. If replacement of macros in the preprocessing tokens following the sequence
__has_embed ( and before a matching
)
(possibly produced by macro expansion)
encounters a preprocessing token that is one of the
identifiers
limit,
prefix,
suffix, or
if_empty
and that
identifier is defined
as a macro (
[cpp.replace.general]), the program is ill-formed
. If the preprocessing token
defined
is generated as a result of this replacement process
or use of the
defined
unary operator does not match one of the two specified forms
prior to macro replacement,
the behavior is undefined
.