Boost logo

Boost :

Subject: Re: [boost] C++11 Metaprogramming
From: Eric Niebler (eric_at_[hidden])
Date: 2012-04-04 01:59:45


On 4/3/2012 10:20 AM, Dave Abrahams wrote:
>
> on Sun Apr 01 2012, Olivier Grant <olivier.grant-AT-gmail.com> wrote:
>
>> Hi Dave,
>>
>> That's going to be an interesting presentation. Here is a small piece of
>> code that allows to generate a traits structure that determines if a call
>> can be made on an object with a specific function name and specific
>> arguments and return value :
>>
>> https://gist.github.com/2276393
>> (compile with : g++ -std=c++0x -Wall -o has_callable has_callable.cpp)
>>
>> This was not possible in C++03, or at least not completely possible, and
>> the code is much simpler with C++11 for the cases where it was possible as
>> well.

Well, there's this: http://tinyurl.com/85sv5sy [*]

> Yep, I see. However, I also have some questions about the utility of
> such traits. As I mentioned to Mathias, structural matching is always
> susceptible to false positives.

Unless I'm mistaken, you can't get my code to report a false positive.
You can get it to fail to compile with an ambiguity error, but only if
you go tinkering with extremely obscure language features. (E.g. by
making an object callable by giving it an implicit conversion to a
function pointer.)

Anyway, the link describes a few cases in Proto where this trait is
used, and others have found it useful.

[*] There is a better implementation and a link to further discussion
attached to the following feature request:
https://svn.boost.org/trac/boost/ticket/3783

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk