I have a few questions regarding boost::fusion
1) What exactly is the emphasis on the compile-time capabilities of fusion? Is it just to "glue" template metaprogramming with "normal" run-time programming (hence they say fusion is the mixing of compile time with run time code)? If so, I thought you could combine metaprogramming with normal run-time C++ already?
2) Does fusion only work with tuples? I seem to see tuples in all the fusion examples. Or, is tuple just an example of a fusion "sequence" and tuple, along with other types can count towards a fusion sequence?
3) Again, trying to understand fusion- how does fusion differ from a framework to allow generic coding? We have templates for that right? Again, is the emphasis on fusion being with the compile-time programming?
4) Are there any prerequisite boost libraries one needs to know in order to use fusion? I have seen/heard MPL mentioned a few times.
5) What are the areas in which fusion most used?
6) Why do a lot of the metaprogramming (compile-time) functions return types?
Any additional advice regarding boost fusion is most appreciated.