Boost logo

Boost Users :

From: Michiel Helvensteijn (m.helvensteijn_at_[hidden])
Date: 2008-07-16 18:57:39


Steven Watanabe wrote:

>> But the compiler (GCC 4.1.2) complains:
>>
>> error: no matching function for call to 'neg(<unresolved overloaded
>> function type>)'
>>
>> What's the problem. And, also, what's the solution? :-)
>>
>
> Internal to the compiler, the type of is<int> is a special type used to
> flag overloads. (unresolved overloaded function type). The problem is
> that you are passing this special type to a function template (the
> boost::function constructor) which does not provide enough information
> to resolve the overloading.

Maybe I misunderstand your explanation. But I'm not sure if is<int> has
anything to do with the problem. As a test I tried the following:

bool foo(int a) {
    return a == 1;
}

...

BOOST_CHECK_PREDICATE( neg(foo), (2) );

Which gives a similar (though less unresolved) error-message:

error: no matching function for call to 'neg(bool (&)(int))'

> The solution is to add a cast:
> static_cast<bool(*)(const std::string&)(&is<int>)>

Hm. That's not exactly pretty. I'd rather use boost::bind itself on the call
site. I was hoping to be able to fix something in the definition of neg
instead.

-- 
Michiel Helvensteijn

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net