Je m'attendais à A::~A()
dans ce programme, mais ce n'est pas le cas :
#include <iostream>
struct A {
~A() { std::cout << "~A()" << std::endl; }
};
void f() {
A a;
throw "spam";
}
int main() { f(); }
Toutefois, si je remplace la dernière ligne par
int main() try { f(); } catch (...) { throw; }
entonces A::~A()
est appelé.
Je compile avec "Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86" depuis Visual Studio 2005. La ligne de commande est la suivante cl /EHa my.cpp
.
Le compilateur a-t-il raison comme d'habitude ? Que disent les normes à ce sujet ?
1 votes
Pour information, j'ai reproduit ce même problème avec le même code dans Visual C++ 2003. +1 pour la question.