Следующий код в порядке на VC ++ 2012
#include <algorithm>
#define MAX_OF_2(a,b) std::max(a,b)
#define FOO(a) a
// work
#define MAX2(...) FOO(MAX_OF_2(__VA_ARGS__))
// Not work
// #define MAX2(...) MAX_OF_2(__VA_ARGS__)
int main()
{
int i = MAX2(1,2);
}
Он не может скомпилироваться без использования FOO
макро. Это показывает не достаточно фактического параметра для MAX_OF_2
, Почему или какая-либо ошибка на компиляторе?
Это известный ошибка в MSVC
В твоем случае __VA_ARGS__
считается, что это макрос, который нуждается в расширении.
Других решений пока нет …