Library Idea
metafunction


by Robert Ramey


Recently there has been discussion on the Developer’s mailing list regarding the status, maintenance (or lack thereof), and improvement of Boost MPL by Alexi Gurtovoy and David Abrahams.

This is a pivotal library in boost and is use by many other libraries.The library consists roughly of three parts:

a) integral constants
b) metafunctions
c) typelists which are insired by and analogous to containers of STL.

It was made around 2003 and is compatible with C++03. It includes much hacking to support many obsolete and defective compilers.
MPL was written by a pair of the most talented C++ programmers on the planet. It took them many months of work. (They also wrote a book on the subject!).

* it contains support for many obsolete (or never really working) compilers
* it’s a very large and comprehensive library with many components
* it needed to employ the most obscure template meta programming/preprocessor programming tricks.
* so its very hard to understand, enhance and maintain.*
* There is currentlly no specific person currently specifically responsible for it.

Making such a library with C++11 or later compiler would be a much, much easier undertaking than the original was.

I believe that a) above – integral constants can mostly be re-implemented with constexpr facilities of C++11 and that very little effort if any would be required.

Your task, should you choose to accept it, would be to make a modern version of b) – the metafunctions. Besides making the job more doable, limiting the scope in this way would make the library something that would be more likely to be eventually included as part of the C++ standard library. After all, the standard library includes type_traits (from boost). Inclusion of metafunctions to use the type_traits seems natural and compelling.

Given what I’ve said above, this task may be considered daunting. On the other hand, there are factors which mitigate the difficulty here:

* tests are all done – just select the one’s from MPL which are relevant and copy them over
* documentation is all done – just select the relevant part and re-format it for BoostBook.

So here we have a doable task which would be really useful to the Boost and C++ community.


There are 0 comments

Comment on This Page