I do not see anything in the standard which prevents it.
The identifier _ VA_ARGS _ shall occur only in the replacement-list
of a function-like macro that uses the ellipsis notation in the
parameters.
An identifier _ VA_ARGS _ that occurs in the replacement list shall
be treated as if it were a parameter, and the variable arguments shall
form the preprocessing tokens used to replace it.
You can very easily test it yourself:
#define VALIST_TERMINATOR NULL
#define mymacro(targ, ...) compile_args(targ, __VA_ARGS__, VALIST_TERMINATOR)
void compile_args(unsigned *targ, ...)
{
unsigned *x;
va_list a_list;
va_start(a_list, targ);
while((x = va_arg(a_list, unsigned *)))
{
printf("%x\n", *x);
}
va_end(a_list);
}
int main(void)
{
mymacro(&(unsigned){1}, &(unsigned){2}, &(unsigned){3}, &(unsigned){4});
}
https://godbolt.org/z/6aPWxaoMj