¿Puedo redefinir una macro de C ++ y luego definirla de nuevo?

Estoy usando la biblioteca JUCE y varios encabezados de Boost en mi código. Juce define "T" como una macro (gemido), y Boost a menudo usa "T" en sus definiciones de plantillas. El resultado es que si de alguna manera incluye los encabezados JUCE antes de los encabezados Boost, el preprocesador expande la macro JUCE en el código Boost, y luego el compilador se pierde irremediablemente.

Mantener mi inclusión en el orden correcto no es difícil la mayor parte del tiempo, pero puede ser complicado cuando tiene una clase JUCE que incluye algunas otras clases y en algún lugar de la cadena, un archivo incluye Boost, y si alguno de los archivos anteriores a él Necesitaba un JUCE incluido, estás en problemas.

Mi primera esperanza al arreglar esto fue

#undef T

Antes de cualquier incluye para Boost. Pero el problema es que si no lo redefino, otro código se confunde y no se declara "T".

Entonces pensé que tal vez podría hacer algunos trucos circulares de #define así:

// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___

Feo, pero pensé que podría funcionar.

Tristemente no. Obtengo errores en lugares usando "T" como macro que

'___T___' was not declared in this scope.

¿Hay alguna manera de hacer que estas dos bibliotecas funcionen juntas de manera confiable?

Respuestas a la pregunta(3)

Su respuesta a la pregunta