C++ Template Metaprogramming - Is it possible to output the generated code?
I would like to debug some templated code to understand it better.
Unfortunately I'm new to template metaprogramming and it IS hard for me to get in.
When I try to output the preprocessed source files I get 125 000 lines of code :/
So is there a way I can see the generated Code? (The library I'm using is SeqAn)
Nope, in general, it can't be done. Templates are simply part of the C++ language, they're not a separate preprocessor, so they don't generate C++ code.
The usual solution is to sprinkle your code with static asserts and other tests to verify that the right templates get instantiated in the right ways.
Once you start getting lost in your metaprogramming, this simple trick can help you determine which type a template parameter really is:
// given a variable t of an unknown type T
int*** i = t;
When the compiler encounters this, it'll print out a nice and simple error message, "Can not convert <long, detailed typename>
to int***", allowing you to easily verify that the template parameter T is actually the type you think it should be.
No it isn't. The preprocessor has nothing to do with template processing, which is performed by the compiler. Templates do not generate C++ code, any more than a function call does - they are an integral part of the C++ language itself.
Check my publication on C++ template metaprogram debugging
From page 6 you can see how it works. For specific purposes you won't need the whole toolchain, it can be done by hand.
I have put together a Visual C++ add-in where you could place breakpoints etc. but it was rather a proof of concept than a tool for every day use.
We have been working on a graphical frontend that shows all the instantiations, allows debugging, profiling. Unfortunately we cannot promise any publish date for that tool, as we do it in our quite limited free time.
UPDATE: the debugger and profiler is available here
UPDATE: C++Now presentation
This is potentially the answer to your question:
C++ Template preprocessor tool
Seems to have satisfied the last person who asked - though I can't imagine why! The output of a C++ compiler in C is usually pretty unreadable, because it isn't intended to be an aid to understanding, merely a kind of portable assembly language.