Subject: Re: [boost] Is there BOOST_ENABLE_IF macro now?
From: paul Fultz (pfultz2_at_[hidden])
Date: 2013-08-19 21:11:30
>> Besides being slightly more verbose, this only works in C++11.
> Your example is also C++11, since it uses variadic macros.
Although C++11 includes variadic macros, C++11 is not required to use variadic
macros. Any compiler in the last 8 to 10 years supports some form of variadic
> The macro can be changed to just automatically
> wrap everything in and_ and it will get the functionality you are looking
> for, I just don't think it's necessary, and as I'm sure Mathias
> would point
> out, it adds an extra instantiation if there is only one condition (as is
> frequently the case).
Yes it does add quite bit of extra instantiations, since it relies on folding
over an mpl sequence. In C++11, I could do the fold over a variadic template.
This should reduce it down to 1 or 2 extra instantiations, for just a single
> Again, you can already do all of this via and_ and not_. I'm probably the
> last person to be afraid of preprocessor metaprogramming, but making a
> little preprocessor EDSL just for "and" and "not" seems like
> overkill to
> me, especially for something like enable_if.
It isn't just a EDSL for 'and' and 'not'. It helps improves the clutter caused
by enable_if, especially for function declarations.
> Your macro also is more
> complicated than that, since you now need to account for commas in
> individual conditions as well.
The macro isn't that complicated, its under 200 lines of code for all three
variants of the macro.
>> I was referring to the ConceptsLite proposal.
> I'm not going to open up this can of worms in this thread, but I am not a
> fan of that proposal in the least.
The proposal seems to be just native support of enable_if. Which lets the
compiler do better overload matching, and error reporting. It really has
nothing to do with concepts.
Paul Fultz II
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk