
Pavel Vozenilek wrote:
"Stefan Seefeld" wrote:
I'v recently run into a problem with 'catch(...)' on MSVC 7.1, where a segmentation fault resulted in a 'first-class exception' (!) that was caught by 'catch(...)' even though the stack wasn't unwound. ... I'd like to get your feedback on how to use it portably. Are my findings false?
No, it is behavior of MSVC by default.
This compiler has switch not to map Win32 exceptions into C++ ones.
VC++ never maps platform exceptions into C++ exceptions unless you specifically write code to do it (using __set_se_handler). What it does do is catch platform exceptions with catch(...). This is generally acknowledged to be A Bad Thing, unfortunately there's no way you can make catch(...) not catch platform exceptions with VC7.1. Using VC7.1 it's only "safe" to catch platform exceptions if you compile with /EHa (the default is /GX which is equivalent to /EHsc). Under VC8 catch(...) will not catch platform exceptions in code compiled with /EHs, while code compiled with /EHa will retain the behavior it has now. If you want to use catch(...) in VC++ code and NOT translate platform exceptions into C++ exceptions, your only real choice is to use __set_se_handler to set a "handler" that terminates the program when a platform exception is raised. -cd