В C ++> = 11 возможно ли безопасно генерировать исключение из деструктора, т. Е. Выбрасывать его, только если исключение уже не активно?
Я пытался:
#include <exception>
#include <stdexcept>
#include <stdio.h>
struct foo{
foo();
~foo() noexcept(false);
};
foo::foo() { }
foo::~foo() noexcept(false)
{
if (nullptr==std::current_exception())
throw 2;
}
int main()
{
try{
struct foo f;
#if 1
throw 1;
#endif
}catch(int X){
printf("ex=%d\n", X);
}
}
без успеха.Я неправильно использую функцию std::current_exception
?
Я бы хотел получить ex=1
, если включена часть throw 1;
, и ex=2
в противном случае.
В настоящее время я получаюterminate called after throwing an instance of 'int'
несмотря на проверку if
, которая, как мне кажется, должна была предотвратить второй бросок, когда исключение было уже активным.