patch: new attribute enable_if

Nick Lewycky nicholas at mxc.ca
Sun Sep 22 15:01:41 PDT 2013


Chandler Carruth wrote:
> On Sun, Sep 22, 2013 at 3:24 AM, Nick Lewycky <nicholas at mxc.ca
> <mailto:nicholas at mxc.ca>> wrote:
>
>     The attached patch adds a new attribute named "enable_if" which
>     takes an expression and a string. At the call site, the arguments
>     are substituted into the enable_if expression (which is written in
>     terms of the parameters) to determine whether this function is a
>     viable candidate.
>
>
> What's the motivation? The C++ committee looked at just such a construct
> and currently is leaning in a different direction (concepts lite) so it
> seems odd to add this as an extension to Clang at this point.

C++ already has std::enable_if so I don't see any use for this in C++ 
code. (Technically it's a little stronger than std::enable_if because it 
doesn't perform any decay and template instantiation can, but I don't 
expect anybody to ever care.) It's for C code, and C headers included in 
C++ code.

The motivation is to provide a compiler extension that would allow C 
library authors to implement API checking rules, and more specifically 
the rules found in fortify. See the test/Sema/enable_if.c included in 
the patch for some examples.

Nick



More information about the cfe-commits mailing list