Boost logo

Boost :

From: Pavel Vozenilek (pavel_vozenilek_at_[hidden])
Date: 2004-05-15 01:27:43


"Andrei Alexandrescu wrote:

> > Multi index container library includes ScopeGuard (almost verbatim
> > from Andrei) until some boost-wide solution appears.
>
> What does it/should it do if the guard function throws an exception? Is
> there some try/catch in ScopeGuard's destructor?
>
> I was never sure what to do there. You can't pass an error out, you can't
> throw... and to keep the library general, you can't do something like
> logging or writing to cerr. Any ideas?
>
The implementation in multi index container does not contain try/catch.

My personal opinion is to keep it this way:
- adding try/catch would add overhead, significant
   for simple operations
- now it has (nearly) the same semantics as old
  fashioned manual handling:

   ON_BLOCK_EXIT(foo);

behaves like hand written:

   if (!my_flag) foo();

Overload can be added:

   ScopeGuard<nothrow> = makeGuard<nothrow>(..)

   ON_BLOCK_EXIT_NOTHROW(...)

for other cases.

/Pavel


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