C++ attempts to do anything you can imagine. You can't please everyone all the time, but you can please some people all the time or everyone some of the time. Many languages out there specialize on one task. PHP makes web programming easy for anyone, for example. C++, if you choose to learn it, is the right tool for nearly every job. It just has so many features that there's almost nothing it can't do.

This is more or less the purposeful direction of the ISO 14882 standards committee. If there is something that could possibly be practical in C++ - say, a flexible functional language for implementing metacompilation algorithms - the committee will recognize it as an important potential use. Through the BOOST header library, there is an established path from experimentation to standardization. Furthermore, the standards committee holds regular, open meetings where technical progress actually occurs.

Why is a jack-of-all-trades so useful as to attract such research effort, not to mention the energy it takes adopters to learn such advanced (but unfriendly) features as MPL?

For example, any random programming interface in C or C++ can be mapped to using C++ templates. Say you have several unfortunately redundant interfaces existing in your project, and you can't really eliminate or unify them. C will let you write a map from several interfaces to one engine, which might help performance. But confusion is as much of a problem as performance, if not more! It's really nice to have only a single interface for a particular job. First, encapsulate the relevant state information and procedural idioms into a C++ template. Then, use template specialization to implement glue from the common interface to each of the redundant components. When you want to write some new code for the crappy interfaces, call the template and tell it to adapt appropriately for the crap interface you'd otherwise be using. You can use a single interface for all your existing messy, heterogeneous code!

Bonuses on the above include friendly type-error messages when you get confused about which interface you're supposed to be using, and instant translation between the interfaces if you implement a copy constructor for the template.

In conclusion, C++ gains unique abilities from being a copycat. Software fires result from the language not supporting desired constructs, or for myriad other reasons. C++ is a fire hose.

A'course, in the wrong hands, a fire hose can be very destructive, too.