Boost logo

Boost Users :

Subject: Re: [Boost-users] no exceptions
From: Vicente BOTET (vicente.botet_at_[hidden])
Date: 2011-03-30 18:59:25


> Message du 31/03/11 00:42
> De : "Emil Dotchevski"
> A : "Hochhaus, Andrew"
> Copie à : boost-users_at_[hidden]
> Objet : Re: [Boost-users] no exceptions
>
> On Wed, Mar 30, 2011 at 3:16 PM, Hochhaus, Andrew
> wrote:
> > Thanks Emil.
> >
> > On Mon, Mar 21, 2011 at 7:01 PM, Emil Dotchevski
> > wrote:
> >>> 2) What is the "recommended" way to throw exceptions inside boost
> >>> library code (BOOST_THROW_EXCEPTION, boost::throw_exception, etc)?
> >>
> >> For BOOST_NO_EXCEPTIONS to work, it is sufficient to use
> >> boost::throw_exception to throw. However, it is recommended to use
> >> BOOST_THROW_EXCEPTION instead, which has the benefit of storing the
> >> file and line number into the exception object. See
> >> http://www.boost.org/doc/libs/release/libs/exception/doc/BOOST_THROW_EXCEPTION.html.
> >
> > That is what I was hoping for.

Unfortunately there is no recommended way to work without no exceptions, as the long thread Emil mentioned explains. At least it is not included in the guidelines.

> >>> 3) If this is not intended behavior, would incremental patches to
> >>> remove these dependencies be considered for inclusion?
> >>
> >> You mean dependencies on boost/throw_exception.hpp? I'd think that
> >> patches that convert naked throws to BOOST_THROW_EXCEPTION should be
> >> accepted, since the boost/throw_exception.hpp header is extremely
> >> lightweight.
> >
> > Yes. I'm hoping to convert naked throws to BOOST_THROW_EXCEPTION.

I'm sure that most of the library authors will accept the patch, but I will request directly before doing it.

> > While I'm at it, any reason why naked {try,catch} shouldn't also be
> > converted to BOOST_{TRY,CATCH,CATCH_END}?

There is alreadt boost/detail/no_exceptions_support.hpp

void foo() {
BOOST_TRY {
...
} BOOST_CATCH(const std::bad_alloc&) {
...
BOOST_RETHROW
} BOOST_CATCH(const std::exception& e) {
...
}
BOOST_CATCH_END
}

With exception support enabled it will expand into:

void foo() {
{ try {
...
} catch (const std::bad_alloc&) {
...
throw;
} catch (const std::exception& e) {
...
}
}
}

With exception support disabled it will expand into:

void foo() {
{ if(true) {
...
} else if (false) {
...
} else if (false) {
...
}
}
}

> Yes. See the long discussion we had about that issue. :)

See the dev ML.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net