I was wondering if there is a way to use a C++ compiler to just produce C++ code where all templates have been expanded to the instantiations that are required by the program. This code must exist at some point in the compilation process, although probably not in ASCII form by default, but it should not be too difficult to convert it back to readable C++ code in my opinion.
EDIT: I am mostly interested in a solution that will produce actual C++ code (which at least compiles and ideally is also readable), not just an overview of classes and functions that are instantiated. This seems like a useful feature for making complex templated code more readable (e.g. for debugging), or in case the code needs to be processed by software other than a regular C++ compiler, which may not (fully) support templates.
I think "Templator" might help: Demo at CppCon2015, Slides
Templates are part of the language, not some pre-processor pass - they are processed by the compiler, just like other code.
There is no way to do this in Visual Studio 2012 (Property -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocess to a File - won't give you expanded templates).
The g++ has a bunch of debug options. I would try
-fdump-class-hierarchy
(not tested).One way would be to compile your program in debug and then dump the symbols. All the compiled templates must have their symbol defined.
Ofcourse you would missed inlined functions, but this can be suppressed with
To get the symbols use: