$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [function] function wrapping with no exception safetyguarantee
From: OvermindDL1 (overminddl1_at_[hidden])
Date: 2010-10-07 22:56:41
On Thu, Oct 7, 2010 at 8:37 PM, Emil Dotchevski <emil_at_[hidden]> wrote:
> On Thu, Oct 7, 2010 at 6:22 PM, Peter Dimov <pdimov_at_[hidden]> wrote:
>> Daniel Walker wrote:
>>
>>> void do_stuff(boost::function<int(int)> f)
>>> {
>>> // ...
>>> if(f) {
>>> // Remove the exception safety guarantee for this block.
>>> boost::unsafe_function<int(int)> g = f;
>>> for(int i = 0; i < INT_MAX; ++i)
>>> g(i);
>>> }
>>> // ...
>>> }
>>
>> This example implies that unsafe_function is inherently more efficient, but
>> this need not be so. An empty function may point to throw_bad_function_call
>> instead of NULL.
>
> Right, and what the empty boost::function does needs not be decided at
> compile time, it can be done in the constructor.
However the empty built-in Boost.Function still does an if(isnull)
test on every operator call, whether you assigned something in the
constructor or not...