¿Cómo detectar el error de división por cero en Visual Studio 2008 C ++?

¿Cómo puedo detectar un error de división por cero (y no otros errores; y para poder acceder a la información de excepción) en Visual Studio 2008 C ++?

Intenté esto:

try {
  int j=0;
  int i= 1/j;//actually, we call a DLL here, which has divide-by-zero
} catch(std::exception& e){
  printf("%s %s\n", e.what()); 
}  catch(...){
  printf("generic exception");
}

Pero esto va al genérico ... bloque catch. Entiendo que el __try específico para MS puede ser útil aquí de alguna manera, pero prefiero el C ++ estándar, y en cualquier caso tengo destructores que impiden el uso de __try.

ACLARACIÓN: El código anterior se simplifica para fines de discusión. En realidad, la división por cero es un error que ocurre en lo profundo de una DLL de terceros para la cual no tengo el código fuente. El error depende del parámetro (un identificador de una estructura compleja) que paso a la biblioteca, pero no de forma obvia. Por lo tanto, quiero poder recuperarme con gracia.

Respuestas a la pregunta(8)

Su respuesta a la pregunta