Рассмотрим этот макрос:VARIADIC макросы с нулевыми аргументами, и запятые
#define MAKE_TEMPLATE(...) template <typename T, __VA_ARGS__ >
При использовании с нулевыми аргументами он производит плохой код, поскольку компилятор ожидает идентификатор после запятой. На самом деле препроцессор VC достаточно умен, чтобы удалить запятую, но GCC - нет. Поскольку макросы не могут быть перегружены, это кажется, что это занимает отдельный макрос для этого особого случая, чтобы получить это право, как в:
#define MAKE_TEMPLATE_Z() template <typename T>
Есть ли способ, чтобы заставить его работать без введения второго макроса?
Спасибо. Кстати, это стандартное поведение или вещь gcc? – uj2
@ uj2: Это GCC; стандарт просто запрещает пустые вариационные списки. Кстати, это смешение C99 с C++ в любом случае, поэтому этот код строго нестандартен, если вы не в C++ 0x ... в этом случае вам нужно ... – Potatoswatter
Не против шаблона, это просто игрушечный пример. Как это обязательно 0x, не определяет ли C++ 98/03 переменные макросы? – uj2