次のコードを検討してください。
#define F(x, ...) X = x and VA_ARGS = __VA_ARGS__
#define G(...) F(__VA_ARGS__)
F(1, 2, 3)
G(1, 2, 3)
期待される出力はX = 1 and VA_ARGS = 2, 3
両方のマクロであり、GCC で得られるものですが、MSVC はこれを次のように展開します。
X = 1 and VA_ARGS = 2, 3
X = 1, 2, 3 and VA_ARGS =
つまり、__VA_ARGS__
複数の引数に分割されるのではなく、単一の引数として展開されます。
これを回避する方法はありますか?