Microsoft Visual Studio Professional 2015 Version 14.0.25431.01 Update 3 issues errors when compiling the code below. Looks like a bug to me.
Thank you.
#include <iostream>
#define A( a, b, c, ... ) #__VA_ARGS__
#define B( ... ) A(__VA_ARGS__)
int main()
{
// warning C4003: not enough actual parameters for macro 'A'
// error C2059: syntax error: ';'
std::cout << B( 1, 2, 3, 4 ); // should print '4'
return 0;
}
It looks like a bug to me too. It's possible to work around it with another layer of macros:
The idea is that first,
EXPAND(A)
gets expanded toA
and(__VA_ARGS__)
gets expanded to( 1, 2, 3, 4 )
. Then, you're left withA ( 1, 2, 3, 4 )
, which VC++ understands if you force it to expand yet again.