== Why is this an issue? ``++bool std::uncaught_exception()++`` allows you to know whether a thread is in an exception stack unwinding context. However, its practical functionality was restricted. {cpp}17 deprecates ``++bool std::uncaught_exception()++`` and introduces ``++int std::uncaught_exceptions()++`` which returns the number of uncaught exceptions. The code example below shows how you can benefit from this new improved function. ``++std::uncaught_exception++`` has been removed in {cpp}20. This rule will flag any usage of ``++std::uncaught_exception++``. === Noncompliant code example [source,cpp] ---- class Transaction { // ... ~Transaction() { if (!std::uncaught_exception()) { // Noncompliant, replace std::uncaught_exception by std::uncaught_exceptions // commit } else { // rollback } } }; ---- === Compliant solution The following example shows how ``++std::uncaught_exceptions++`` can be used to determine in ``++~Transaction++`` if a new exception was thrown since ``++t1++``/``++t2++`` creation. [source,cpp] ---- class Transaction { // ... ~Transaction() { if (initialUncaughtExceptions == std::uncaught_exceptions()) { // commit } else { // rollback } } // ... int initialUncaughtExceptions = std::uncaught_exceptions(); }; int f() { try { Transaction t1; // ... something here could throw } catch(...) { Transaction t2; // ... something here could throw } } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Replace this use of std::uncaught_exception by std::uncaught_exceptions. endif::env-github,rspecator-view[]