gcc/testsuite/g++.dg/eh/forced3.C says forced unwinding calls std::unexpected going through a throw() function. gcc/testsuite/g++.dg/eh/forced4.C says forced unwinding does not call std::unexpected going through a throw(int) function. The behavior looks strange: if we consider forced unwinding a special exception type, both throw() and throw(int) should catch it. Note: for nothrow, GCC emits minimum amount of .gcc_except_table section. forced unwinding calls std::terminate.
(In reply to Fangrui Song from comment #0) > The behavior looks strange: if we consider forced unwinding a special > exception type, both throw() and throw(int) should catch it. It's not strange if you consider throw() to be noexcept(true) and throw(int) as similar to noexcept(false).
FWIW I think this belongs to the libgcc or c++ components, as _Unwind_ForcedUnwind is not defined in libstdc++.