Это будет следствием Почему Alexandrescu не использует std:: uncaught_exception() для реализации SCOPE_FAIL в ScopeGuard11?
Я хотел бы определить, создает ли кто-то MyClass
в деструкторе другого класса (или с активным деструктором где-то в стеке вызовов).
class MyClass
{
public:
MyClass(){
assert(???what to put here????);
}
}
void f(){
MyClass m; //whether this asserts should be context dependant
}
class OtherClass{
~OtherClass(){
MyClass m; //this should assert
f(); //this should too;
}
}
int main()
{
MyClass m; //this should not assert
f(); //this should also not assert
}
Одна попытка может быть:
assert(!std::uncaught_exception());
но это будет работать только в том случае, если деструктор вызывается из-за исключения, а не если он вызывается, потому что объект вышел из области видимости.