Boost logo

Boost :

Subject: Re: [boost] painless currying
From: Michael Caisse (boost_at_[hidden])
Date: 2011-08-28 01:00:44


On 08/27/2011 04:20 PM, Jeffrey Lee Hellrung, Jr. wrote:
> On Sat, Aug 27, 2011 at 2:43 PM, Michael Caisse<
> boost_at_[hidden]> wrote:
>
>> On 08/24/2011 08:13 AM, Eric Niebler wrote:
>>
>>> On 8/24/2011 1:58 AM, Roman Perepelitsa wrote:
>>>
>>> I think this is the case with functors generated by bind -- they appear
>>>> to
>>>> be callable with any number of arguments.
>>>>
>>> Ouch. :-(
>>>
>>> One option, which I don't like, is to "fix" bind to disable any
>>> operator() overloads that result in an invalid invocation of the bound
>>> function. That can be done easily with the is_callable_with metafunction
>>> in my curryable implementation, but would reduce portability somewhat.
>>>
>>>
>> That isn't "broken" behavior. Very often that is exactly what you want from
>> bind.
>>
> Why would you prefer enabling operator() overloads of bind that result in a
> compiler error over "SFINAE-disabling" them? (Other than compile time
> considerations and minimizing complexity.)
>
> - Jeff

Hi Jeff -

I might be confused. I thought we were talking about the bound functor
allowing a different number of arguments than the function that it is
bound to. For example, more arguments like this:

    void log( std::string name, timestamp_t stamp );
    ...

    function<void(std::string,timestamp_t)> notify = bind( &log, _2, _1 );
    ...

    notify( timestamp, source, lat, long, message );

There is no error here. Have I missed the point?

michael

-- 
Michael Caisse
Object Modeling Designs
www.objectmodelingdesigns.com

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