This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 120a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2026-06-08
(From submission #915.)
If stack unwinding does occur in the situation where no matching handler is found, 14.3 [except.ctor] paragraph 2 is ill-defined for lack of a try block.
Possible resolution:
Change in 14.4 [except.handle] paragraph 6 as follows:
If no match is found among the handlers for a try block, the search for a matching handler continues in a dynamically surrounding try block of the samethreadfiber. The invocation of the initial function of a fiber is surrounded by an implicit try block.
Change in 14.4 [except.handle] paragraph 8 as follows:
If no matching handler is found,Otherwise, if the search for a handler exits the function body of the initial function of a fiber, the function std::terminate is invoked; whether. [ Note: Whether or not the stack is unwound before this invocation of std::terminate is implementation-defined (14.6.2 [except.terminate]). -- end note ]
Change in 14.6.2 [except.terminate] paragraph 1 as follows:
Some errors in a program cannot be recovered from
[Note 1: These situations are:, such as when an exception is not handled or a std::thread object is destroyed while its thread function is still executing. In such cases, the function std::terminate (17.9.5 [exception.terminate]) is invoked.-- end note ]
- ...
- when the exception handling mechanism cannot find a handler for a thrown exception (14.4 [except.handle]), or
- ...
- when execution of the initial function of a
threadfiber exits via an exception (32.4.3.3 [thread.thread.constr]14.4 [except.handle]), or- ...
Change in 14.6.2 [except.terminate] paragraph 2 as follows:
In the situation whereno matching handler is foundthe search for a handler (14.4 [except.handle]) exits the function body of the initial function of a fiber, it is implementation-defined whether or not the stack is unwound before std::terminate is invoked. In the situation where the search for a handler(14.4 [except.handle])exits the function body of a function with a non-throwing exception specification (14.5 [except.spec]), it is implementation-defined whether the stack is unwound, unwound partially, or not unwound at all before the function std::terminate is invoked. In all other situations, the stack shall not be unwound before the function std::terminate is invoked. An implementation is not permitted to finish stack unwinding prematurely based on a determination that the unwind process will eventually cause an invocation of the function std::terminate.