РЕДАКТИРОВАТЬ: Следующий ответ работает только на более ранних версиях cpp
. Он разрывается где-то между 4.2.1 и 4.3.2. gcc -E
и g++ -E
ломаются еще раньше. Подробности смотрите в комментариях.
Вот одна хитрость, которая работает:
#define HASH() #
...
HASH()ifdef __cplusplus
class foo { };
HASH()endif
Вам придется использовать cpp
напрямую, поскольку компилятор попытается немедленно использовать выходные данные препроцессора и не будет знать, что делать с необработанными директивами.