Boost logo

Boost :

From: carlos pizano (carlospizano_at_[hidden])
Date: 2003-09-21 13:08:45


Dave Abrahams wrote:
> No, I'm disabling the warning with pragmas. The technique works fine.

I don't think so. Well, it can fail. See Carl Daniel post on 9/21. I saw
the thread(s) on comp.lang.c++.moderated about the subject but nobody
mentioned the interaction of the *technique* with /EHs at that time.

Here is where I am going with this. The current way, complied with /EHs
seems to me that can be better done with something along the lines of:

execute()
{

__try
{
        try
        {
                user_function();
        }
        catch( specific_type1& )
        {
                report1(text);
        }
        catch( specific_type2& )
        {
                report2(text);
        }
        ... other type specific catch(s) here..
        
        ... do not put catch(...) here ever..
}
__except ( filter(GetExceptionInformation()) )
{
        report_def()
}

} // end of function

/* take the above code at the pseudo-code level */

Now, inside filter() you can do interesting things for instance
re-throwing the SE under certain conditions or checking for the magic
number that says that the SE is really a C++ exception and maybe do your
trick...

Note that the code above will be done in two nested calls since VC does
not
Allow you to mix __try and try on the same function.

There seems to be very little restrictions on what filter() can be, I
wonder
if we can make it dispatch to a virtual function so a derived class can
customize the behaviors.

Think about it.

CPU


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