Программа выдает исключение из деструктора noException(false) (я знаю, что это плохая практика, но не полностью запрещена) объекта, переданного в качестве аргумента функции.
Вот минимальный пример:
Код: Выделить всё
#include
#include
struct A {
~A() noexcept(false) { throw 1; }
};
void f( A ) { }
int main() {
std::set_terminate([]() {
std::_Exit( 2 );
});
try {
f( {} );
}
catch( int x ) {
return x;
}
}
В MSVC (Visual Studio) программа вызывает обработчик завершения и возвращает 2. Онлайн-демо.
Правильен ли здесь компилятор MSVC (программа неправильная или зависит от реализации)?
Подробнее здесь: https://stackoverflow.com/questions/798 ... is-invoked
Мобильная версия