Boost logo

Boost :

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 

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk