
In a branch called "Version2", see https://github.com/boostorg/type_traits/tree/Version2 is a partially rewritten type_traits lib: it doesn't yet contain all the traits of the old one, but there's a pretty good selection to test.
I wonder why you have decided to return a reference to mpl::bool_, instead of just ("stupidly") returning by value. Compilers like "stupid" code, they optimize it better. Typically, the use case is:
It was the only way to break the dependency to MPL (without modifying MPL that is). Can't return a forward declaration by value...
void f( mpl::true_ ); void f( mpl::false_ );
f( is_pointer<X>() );
and if you return by value, it can construct directly into the argument, whereas by reference it needs to use the copy constructor.
That said, I still think that it may be better to add the conversion on the MPL side; this will obviate the need for the fragile forward declarations (and it will support any integral constants, not just this one).
We can, of course, in addition add a converting constructor to integral_constant as well, so that the "officially blessed" way to dispatch would be on true_type and false_type. This dispatch will work on std:: traits as well.
+1. John.