Hi Jeff, all, It seems that part of Jeff's question is "What is meta-programming good for?", which strikes me as a good question to ask (and I agree with all the other responses suggesting Alexandrescu's book as a good starting point). But, I thought it still might be useful to suggest a list of problems that I have solved, seen solved, or thought about solving with metaprogramming. The "classic" example of meta-programming is using lex & yacc - programs that themselves generate programs. The point of the MPL (and Loki) is to be able to do this in C++ rather than depending on an external tool. In general, what meta-programming lets you do is to do computation at compile time instead of at runtime. For example, you could precompute a table of values as compile time constants instead of filling a table in at initialization time. This might be useful in game programming, for precomputer trig functions. Alexandrescu's book shows how you can automatically generate class heirarchies. Or, have the compiler do the "dirty work" of implementing double-dispatch (picking a function to call based on the runtime types of 2 parameters instead of just one. Virtual functions give you one, metaprogramming gives you 2+ without a lot of code). I use meta-programming to be able to switch between having parameters for my simulation programs be hard-coded (ie compile time constants) or appear as command line arguments by changing just one line of code. MPL (and Loki) gives you the tools to do these kinds of compile-time computations by giving you fundamental algorithms and data structures that exist and can be manipulated in the compiler, but that don't actually exist at run time. Best Regards, -Tom Wenisch