MSVC не раскрывает __VA_ARGS__ правильно

Рассмотрим этот код:

#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 и VA_ARGS = 2, 3 для обоих макросов, и это то, что я получаю с GCC, однако MSVC расширяет это как:

X = 1 and VA_ARGS = 2, 3
X = 1, 2, 3 and VA_ARGS =

То есть __ VA_ARGS __ раскрывается как один аргумент, вместо того, чтобы разбивать его на несколько.

Как можно обойтись?

48
задан Brian Tompsett - 汤莱恩 11 March 2016 в 11:03
поделиться