John Maddock wrote:
I'm going to throw this out there to see what folks think:
They very much approve of, and thank you for, your work. :-) This is so much better. :-)
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: 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.