|
Boost : |
Subject: Re: [boost] The noexcept Specifier & Block
From: Alexander Terekhov (terekhov_at_[hidden])
Date: 2009-04-18 09:19:25
Peter Dimov wrote:
>
> Alexander Terekhov:
>
> > Avoiding unwinding for unexpected exceptions, for example.
>
> The reason the standard specifies calling unexpected() at the exception spec
> point is conceptually sound (but practically not that useful). Consider
>
> void f()
> {
> throw X();
> }
>
> void g() throw(Y)
> {
> f();
> }
>
> void h() throw(Z)
> {
> g();
> }
>
> If unexpected() is always invoked at the throw point, there is no way for an
> exception to escape this call stack. If it's invoked at the exception
> specification points, it can, in principle, first throw a Y, then a Z. The
> primary purpose of unexpected(), as originally envisaged (I presume), is
> exception translation.
But exception translation can be done much more sensibly without
unexpected().
void f()
{
throw X();
}
void g() throw(Y)
{
translate_any_exception_to<Y>(f);
}
void h() throw(Z)
{
translate_exception<Y, Z>(g);
}
No?
regards,
alexander.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk