Boost logo

Boost :

From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2023-04-07 10:19:02


On 4/7/23 00:51, Andrey Semashev wrote:
> On 4/6/23 21:26, Andrzej Krzemienski via Boost wrote:
>> Hi Everyone,
>> It is my understanding that the reason scope_fail was left to die in the
>> C++ Extensions for Library Fundamentals v3 was that it is not
>> implementable.
>
> I'm not sure what you mean in the "left to die" part. Do you mean that
> these facilities are being deprecated?
>
>> One cannot detect if the scope is being left due to an
>> exception thrown from within the scope. Observing the number of uncaught
>> exceptions in the constructor and in the destructor will not work, given
>> that we now have coroutines that can be suspended and then resumed in
>> another thread (with a different number of uncaught exceptions), or even in
>> the same thread but at some later point, when the number of uncaught
>> exceptions has changed.
>>
>> The enclosed example illustrates how a scope_fail fails to call the
>> callback when an exception is thrown from a coroutine. It uses Lewis
>> Baker's CppCoro implementation of a generator.
>>
>> The only reliable way to call a callback when the scope is left due to an
>> exception is through using the explicit call to `deactivate()` function. It
>> is more verbose, but reliable.
>
> I must say I have no experience with coroutines, but my understanding is
> that they are basically incompatible with any mechanism that relies on
> thread-specific state, including the uncaught exceptions counter. Thus I
> wouldn't say scope_success/scope_fail are unimplementable - they clearly
> are - but that they are incompatible with coroutines. That is, these
> scope guards will work as expected as long as you don't switch
> coroutines within the guarded scope.
>
> I admit this is a notable limitation, and I will document it. But I do
> not consider this limitation fatal, as there is plenty code out there
> that doesn't use coroutines - I'd even say, much more code than that does.
>
> Thanks for pointing this out.

Also, I forgot to mention that Boost.Scope's scope_success/scope_fail
support custom failure predicates which may not rely on the exception
state at all.


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