Re: try/catch behaviour with SEH (VC++ 8)
On Fri, 07 Sep 2007 15:40:40 +0530, Aurelien Regat-Barrel
<nospam.aregatba@yahoo.fr.invalid> wrote:
Hi there,
I am a little bit confused. I used to think that std C++ exceptions are
mapped on top of SEH with VC++, but it seems it is no longer true. The
following example:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>
void test()
{
try
{
int *p = 0;
*p = 0;
}
catch ( ... )
{
std::cout << "Catched in C++ handler!\n";
}
}
int main()
{
__try
{
test();
}
__except( EXCEPTION_ACCESS_VIOLATION == GetExceptionCode() )
{
std::cout << "Catched in SEH handler!\n";
}
return 0;
}
outputs "Catched in C++ handler!" if compiled with VC++ 6 - okay. But
VC++ Express 2005 SP1 warns about unreachable code in the catch(...)
block (warning C4702), and the compiled program outputs "Catched in SEH
handler!".
I am very confused about that, I was really convinced it should work as
with VC++ 6. Does anyone know more about this ?
Compile with /GX /O2, and your expectation doesn't hold up in VC6, either.
For more, see:
http://members.cox.net/doug_web/eh.htm
--
Doug Harrison
Visual C++ MVP