Можно ли предотвратить удаление запятой с пустым __VA_ARGS__ в Visual C ++?

В Visual Studio 2005 у меня есть макрос, который выглядит следующим образом (пример !!):

#define MY_CALL(FUN, ...) \
  if(prepare(x, y)) {     \
    FUN(__VA_ARGS__);     \
  }
/**/

Пока функция принимает хотя бы один аргумент, I ' m нормально.

Когда функция принимает нулевые аргументы, препроцессор «услужливо» удаляет «конечную запятую», раскрывая что-то вроде этого:

if(prepare(x y)) { funct(); }

Отлично, не так ли?

Как я могу исправить этот макрос, так что он будет работать с нулем __ VA_ARGS __ в Visual C ++ (VS 2005)?


Очевидно , это ошибка в VS2005 .

7
задан tshepang 26 February 2014 в 17:27
поделиться