Я ожидал, что в этой программе будет вызван 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()
.
Я компилирую с помощью «32-разрядного оптимизирующего компилятора Microsoft (R) C / C ++ версии 14.00.50727.762 для 80x86» из Visual Studio 2005. Командная строка - cl /EHa my.cpp
.
Компилятор как обычно прав? Что стандарт говорит по этому поводу?