A::~A()
私はこのプログラムで呼び出されることを期待していましたが、そうではありません:
#include <iostream>
struct A {
~A() { std::cout << "~A()" << std::endl; }
};
void f() {
A a;
throw "spam";
}
int main() { f(); }
ただし、最後の行を次のように変更すると
int main() try { f(); } catch (...) { throw; }
A::~A()
が呼び出されます。
Visual Studio 2005 から「Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86」でコンパイルしています。 コマンドラインはcl /EHa my.cpp
.
コンパイラはいつものように正しいですか? この問題について標準は何と言っていますか?