Then, there's boost.mirror that hasn't given much news recently, but that had one thing right: you need something to generate the metadata to avoid the pitfalls of writing the macro by hand. I had in mind a tool based on clang to do that but never had time to care about it since my very naive perl code was enough for my small needs.
Easiest of all is to expose the compiler's internal state via a magic namespace in the form of pseudo-template definitions. Then one has, at metaprogramming stage, access to everything the compiler knows at that point. I posited that idea to Chandler Carruth for clang at C++ Now. He didn't seem adamantly opposed. Third party libraries (e.g. a Boost one) could wrap up each compiler's internal magic namespace into something portable and therefore useful. Niall