$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2023-12-01 18:49:14
On 12/1/23 20:25, Andrzej Krzemienski via Boost wrote:
> Hi All,
> This is not a review yet. I am just looking at the front page of the docs,
> and I think the comparison with Boost.ScopeGuard is unfair.
>
> You are comparing C++03 Boost.ScopeGuard with C++11 Boost.Scope. Try
> comparing it with C++03 Boost.Scope.
Boost.Scope doesn't support C++03.
I'm comparing the libraries using the syntax they provide, regardless of
the C++ version, when they both provide equivalent functionality.
> Otherwise compare C++11 to C++11, and there Boost.ScopeGuard has a nicer
> syntax:
>
> int compute()
> {
> // Reset variables on return
> BOOST_SCOPE_EXIT(this_)
> {
> this_->x = 0;
> this_->y = 0;
> };
>
> return x + y;
> }
I don't see where the documentation makes BOOST_SCOPE_EXIT_END optional.
In every example I can see, BOOST_SCOPE_EXIT is accompanied by
BOOST_SCOPE_EXIT_END, C++11 or not. Am I missing something?
Perhaps, you are defining BOOST_SCOPE_EXIT_CONFIG_USE_LAMBDAS and that
allows to omit BOOST_SCOPE_EXIT_END? In that case, there is a discussion
at the end of this section:
that pertains to your use case, and that makes Boost.ScopeExit very much
not equivalent to Boost.Scope.
> Regarding the example with exceptions, nobody would use
> Boost.ScopeGuard like this. A robust usage is in Boost.ScopeGuard's
> docs:
>
>
> void world::add_person(person const& a_person) {
> bool commit = false;
>
> persons_.push_back(a_person); // (1) direct action
> // Following block is executed when the enclosing scope exits.
> BOOST_SCOPE_EXIT(&commit, &persons_) {
> if(!commit) persons_.pop_back(); // (2) rollback action
> };
>
> // ... // (3) other operations
>
> commit = true; // (4) disable rollback actions
>
> }
>
>
> Which is longer, but usable in coroutines. Whereas Boost.Scope's
> solution is not usable in coroutines.
First, what example are you referring to?
Second, if you mean incompatibility of exception_checker with coroutines
then that is already addressed in a note in this section:
If you're using coroutines then just don't use it. Where it is used in
library examples, it is implied that coroutines are not used.