$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [function] invoking without requiring boost::throw_exception
From: Domagoj Saric (dsaritz_at_[hidden])
Date: 2010-09-04 15:33:19
From: "Peter Myerscough-Jackopson" <peter.myerscough-jackopson_at_[hidden]>
Sent: Thursday, September 02, 2010 5:36 PM
> I am using boost::function on an embedded platform, which requires me to
> not use exceptions, and as commented in the thread associated with
>
> http://article.gmane.org/gmane.comp.lib.boost.devel/195351
>
> I am checking that the function object contains a function before
> calling it. There is therefore no need for the invocation of the
> function to check if it is valid, but also there is no method circumvent
> this checking, and therefore my program requires the definition of
> boost::throw_exception, when really it is not needed. This is a concern
> because I intend on compiling my code into a library and do not wish to
> require the user to define boost::throw_exception, especially when I am
> guaranteeing it isn't going to be called from this site. I liked the
> idea of a templated NOP for the function library, but at the very least
> an unchecked invocation method would be great, or a nop-if-empty
> invocation method would be useful.
If you are certain that neither you nor your users use or will use
boost::throw_exception (to actually handle some other cases 'exceptional'
cases in other parts of boost) then you can provide the definition yourself.
Something along the lines of:
void throw_exception( std::exception const & )
{
assert( !"Should not get reached." );
#ifdef _MSC_VER
__assume( false );
#elif defined( __GNUC__ )
__builtin_unreachable();
#else
....
#endif
}
should pretty much completely remove the if-then-throw code from your
release binary...
ps. the code mentioned in the thread you linked to has since somewhat
progressed and can always be found @
https://svn.boost.org/svn/boost/sandbox/function/boost/function ... but it
is still in an unfinished-alpha-msvc specific stage ... I haven't touched it
in months as there has not been any real response from the official
maintainer and I've been swamped with other things (and am currently working
on GIL::IO) but will surely finish it when I get the time (now that I've
started working with GCC also)...
-- "That men do not learn very much from the lessons of history is the most important of all the lessons of history." Aldous Huxley