Рассмотрим этот код:
#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__
раскрывается как один аргумент, а не разбивается на несколько.
Есть ли способ обойти это?