Как указал AProgrammer, компилятор не проглатывает размер (void) sizeof. Я предлагаю удалить скобки из sizeof, например так:
(void)sizeof CompileTimeChecker<(expr) != 0>((ERROR_##msg()));\
Это, кажется, заставляет g ++ принять его и интерпретировать так, как это, вероятно, и предполагалось.
Если этот (пустой) sizeof продолжает доставлять вам неприятности, вы можете получить функцию статической проверки и без нее, например, инициализируя переменную CompileTimeChecker:
CompileTimeChecker<(expr) != 0> a((ERROR_##msg()));\