Я думаю, что проблема может быть в одной из двух вещей.
Во-первых, ваш макрос определен как
cache_info(format, msg...)
Но вы, вероятно, хотели написать
cache_info(format, msg, ...)
Хотя это может быть просто опечатка в вашем оригинальном сообщении.
Что еще более важно, макросы с переменным числом аргументов («переменные макросы») не поддерживаются в C ++; они существуют только в C. Если вы пытаетесь скомпилировать этот код C с помощью компилятора C ++, компилятор должен выдать здесь ошибку, поскольку код C ++ недопустим.