__COUNTER__
был введен только в GCC 4.3 - если вы используете более раннюю версию, макрос просто не определен.В этом случае, возможно, стоит рассмотреть макрос Boost.PPs BOOST_PP_COUNTER
.
В более новых версиях GCC вам все равно нужен другой подход к объединению, так как ##
предотвращает расширение его аргументов,Таким образом, вы должны сначала развернуть их, прежде чем использовать ##
:
#define CAT(a, b) CAT_I(a, b)
#define CAT_I(a, b) CAT_II(a ## b)
#define CAT_II(x) x
#define UNUSED(type) type CAT(UNUSED_, __COUNTER__)
Если вы уже используете Boost, BOOST_PP_CAT()
предоставляет вам ту же функциональность.