Две вещи делают этот код не компилируемым на g ++:
Во-первых, ошибка, которую вы цитируете, заключается в том, что вы хотите получить следующее:
#define LOG(level) __LOG(level)
Уведомление № ##
. Эти хеш-метки означают сцепление, но вы ничего не объединяете. Просто переадресация аргумента.
Вторая ошибка заключается в том, что вы должны удалить
#define LL_TRACE 0
Эта строка означает, что вы в конечном итоге вызываете LOG (0), который расширяется до LOG_0, который не определен.