$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [Stacktrace] review
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2016-12-16 17:53:50
On Fri, Dec 16, 2016 at 2:05 PM, Andrey Semashev <andrey.semashev_at_[hidden]>
wrote:
> On Sat, Dec 17, 2016 at 12:54 AM, Robert Ramey <ramey_at_[hidden]> wrote:
> > On 12/16/16 12:48 PM, Emil Dotchevski wrote:
> >>
> >> a function will either succeed or it will not return.
> >
> > not necessarily
> >
> > bool f() {
> > if ...
> > invoke_error
> > return failure or ignore error
> > ...
> > return success
> > }
> >
> > if invoke error is mapped to throw exception then it will never return.
> If
> > it's mapped to something else - like emitting an error message or
> invoking a
> > user specified call back then it won't throw an exception.
>
> That results in a really horrible API with dual error reporting mechanisms.
>
Indeed. Again, enforcing postconditions is the main benefit of throwing.
Specifically:
if( condition-that-code-below-cant-deal-with )
boost::throw_exception(my_error());
//safe to assume no error occurred because boost::throw_exception does nor
return.
The call to throw_exception is not merely reporting the error but also
protecting the scope that follows.
Emil