$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [system][filesystem v3] Question about error_code	arguments
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2009-10-20 22:40:50
Stewart, Robert wrote:
> Andrey Semashev wrote:
>> Stewart, Robert wrote:
>>> Beman Dawes wrote:
>>> 
>>> set, then there's no need for a null reference.  Unfortunately,
>>> that has a performance downside: the function must be called and
>>> the temporary must be created or a reference to a global object
>>> must be created for all calls that use the default.  A null
>>> pointer default must be cheaper.
>> I think the performance cost of checking a reference or pointer for
>>  validity and checking some property in the error_code instance
>> will be the same. After all, in both cases it comes down to a
>> single comparison of two integers. Even if referencing the global
>> default instance does add overhead, I bet it is negligible.
> 
> I wasn't referring to checking the reference or pointer.  Rather, I
> was pointing out that the reference must be bound to something when
> the default is accepted.  Every call using the default implies code
> that acquires an object or reference to one to which the formal
> parameter can be bound.  That is costlier than simply passing a null
> pointer unless some compiler magic is involved.
The call to throws() can be inlined so that the global object 
acquisition turns into loading its address in a register. The address is 
known at compile time, so there's little difference between loading a 
zero into a pointer/reference argument and loading a valid address into 
a reference argument. No magic needed for this to happen.