Subject: Re: [boost] [type_traits] Rewrite and dependency free version
From: Peter Dimov (lists_at_[hidden])
Date: 2015-01-14 19:51:44
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
> 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.