$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [err] RFC
From: Gavin Lambert (gavinl_at_[hidden])
Date: 2015-11-19 17:06:54
On 20/11/2015 04:58, Domagoj Å ariÄ wrote:
>> The more problematic case is if the combiner was not expecting
>> failure, and so someone used the same expression with a combiner that
>> accepted T. So the compiler calls all three calc methods
>> (constructing fallible_result<T>s along the way), then gets around to
>> converting the first one back to T, which throws. This is ok, but
>> then the other two are destroyed; and if at least one of these throws
>> too, then you're dead.
>
> As explained before this cannot happen as even the implicit conversion
> operators work only on rvalues...
The result of a function call that returns either a bare T or a T&& is
an rvalue.
Your asserts will prevent this particular usage, but that's the only
thing that does. And asserts don't fire until runtime, so if it's an
infrequently exercised path (without a unit test) this may go unnoticed
for quite a while. Especially if people are in the habit of testing
release builds (which is not that uncommon).