https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89665
--- Comment #2 from Giacinto Cifelli <gciofono at gmail dot com> --- It mentions the following: "A parameter in the replacement list, unless preceded by a # or ## preprocessing token or followed by a ## preprocessing token (see below), is replaced by the corresponding argument after all macros contained therein have been expanded." (in a 2005 free draft on internet from WG14, but I have hopes that the official ISO document hasn't changed this) So, this is not really helpful. It can lead to the current lazy expansion or to the expansion of each argument each time it is used, or possibly to the pre-expansion of the list of parameters. All options are possible.