El compilador en realidad no hace ninguna de las expansiones de macros. Esa es la tarea del preprocesador. Todo aparece como un paso, pero el compilador realmente se abre a tareas de preprocesador separadas y atrapa el resultado para usted.
Las plantillas no se "expanden" en tiempo de compilación. Se crean instancias sobre el uso durante la compilación. La diferencia es que el compilador genera inmediatamente código objeto para la plantilla; no hay un código fuente intermedio que aparezca. No se puede ver el código de plantilla instanciado como fuente, se desecha como ensamblaje cuando es necesario.
Si tiene GCC también puede llamar a la pre-procesador directamente a través de 'CPP' con los argumentos adecuados (en su mayoría incluyen caminos y las definiciones de línea de comandos de macro). Otros han respondido por MSVC.
Tenga en cuenta que la pregunta también se refiere a la expansión de la plantilla, y la respuesta seleccionada no responde. – TripShock
[Pregunta relacionada] (http://stackoverflow.com/questions/5193867) tiene una respuesta más útil (aunque específica de gcc). Para obtener más código de alto nivel similar a C++ que RTL, use '-fdump-tree -...' familia de opciones como '-fdump-tree-gimple' en lugar de' -fdump-rtl -... 'sugeridas en esa respuesta. – Ruslan