OVH Cloud OVH Cloud

throw sans paramètre

2 réponses
Avatar
Fabien SK
Bonjour,

J'ai constaté avec surprise que le bout de code suivant compile avec VC6
(qui n'est pas une référence du respect des standards) et avec g++ 3.2
(avec "-Wall -ansi -pedantic"):

void doit()
{
throw;
}

Mais quel peut-il bien se passer dans le cas où la fonction "doit" n'est
pas appelée dans un bloc "catch" ? Une exception de type inconnu,
attrapable uniquement par un "catch(...)" ?

Fabien

2 réponses

Avatar
Patrick Mézard
void doit()
{
throw;
}

Mais quel peut-il bien se passer dans le cas où la fonction "doit" n'est
pas appelée dans un bloc "catch" ? Une exception de type inconnu,
attrapable uniquement par un "catch(...)" ?

Fabien



Ca appelle std::terminate, il me semble.

Patrick Mézard

Avatar
Fabien SK
Patrick Mézard wrote:
void doit()
{
throw;
}

Mais quel peut-il bien se passer dans le cas où la fonction "doit" n'est
pas appelée dans un bloc "catch" ? Une exception de type inconnu,
attrapable uniquement par un "catch(...)" ?

Fabien



Ca appelle std::terminate, il me semble.

Patrick Mézard



Oui, ça je savais déjà qu'une exception non attrapée provoque l'appel de
"std::terminate" :-) Mais la question était: quel est ce type
d'exception. Si je fais:

int main(int argc, char *argv)
{
try
{
throw;
}
catch(...)
{
// quel est le type de l'exception ici ? ?
}
}

Le "throw" n'a pas pu redéclencher une exception existante....

Fabien