|
Boost : |
Subject: Re: [boost] [function] function wrapping with no exception safetyguarantee
From: David Abrahams (dave_at_[hidden])
Date: 2010-10-13 10:42:42
At Tue, 12 Oct 2010 18:50:13 -0700,
Emil Dotchevski wrote:
>
> On Tue, Oct 12, 2010 at 6:38 PM, Dave Abrahams <dave_at_[hidden]> wrote:
> > On Tue, Oct 12, 2010 at 7:59 PM, Peter Dimov <pdimov_at_[hidden]> wrote:
> >> The issue is not coupling with Boost.Exception, the issue is that the user
> >> has to supply a definition of boost::throw_exception when exceptions are
> >> disabled. This was true before there were Boost.Exception.
> >
> > Okay, and could someone please explain to me what is wrong with that
> > requirement?
>
> Maybe someone else should do that but I think I understand it.
>
> Suppose you're a subcontractor who develops a library for another
> company. Internally, you use boost::function and so your library
> requires the executable to define boost::throw_exception.
Ooooh. We don't have a way for the library to define
boost::throw_exception. Riiight.
I think we could fix that pretty easily, though. Those places in
Boost that use boost::throw_exception could switch to something like
this:
boost::detail::throw_(e);
where we define:
namespace boost {
template <class X, bool=false>
struct throw_
{
throw_(X const& x) { boost::throw_exception(x); }
};
namespace detail
{
template <class X>
throw_(X const& e)
{
boost::throw_<X>(e);
};
}
}
and then the 3rd-party library author could just:
namespace boost {
template <class X>
struct throw_<X>
{
throw_(X const&) { /* whatever */ }
};
to force the behavior to something else. He'd just need to make sure
that specialization was included before boost::detail::throw_ was
instantiated.
-- Dave Abrahams BoostPro Computing http://www.boostpro.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk