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(...)" ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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(...)" ?
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
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
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....
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....