https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61643
Bug ID: 61643 Summary: [C++11] std::uncaught_exception returns wrong values after std::rethrow_if_nested Product: gcc Version: 4.10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: ai.azuma at gmail dot com The following program should terminate successfully. //========================================================= #include <stdexcept> #include <exception> #include <cstdlib> struct X { ~X() { if (!std::uncaught_exception()) std::abort(); // (A) } }; int main() { try { throw std::runtime_error(""); } catch (...) { try { std::throw_with_nested(std::runtime_error("")); } catch (std::runtime_error const &e) { try { X x; std::rethrow_if_nested(e); } catch (std::runtime_error const &e) { if (std::uncaught_exception()) std::abort(); // (B) } } } return EXIT_SUCCESS; } //========================================================= However, the program is aborted at the line marked with `(A)', and at the line marked with `(B)' if the line marked with `(A)' is commented out. This problem is reproduced with 4.10.0 20140622, 4.9.1 20140625 and 4.8.4 20140619. The reproducer requires -std=c++11 flag to compile.