The key difference that --enable-cxx-exceptions makes is that it results in libunwind having _Unwind_RaiseException (and likely other functions), which gets called during a C++ throw by __cxa_throw. Without libunwind, this symbol is provided by libgcc_s, whose implementation works correctly. For whatever reason, the one in libunwind, on aarch64, does not succeed in finding a handler and instead calls terminate (which is normal when there is no handler for an exception).
The key difference that --enable- cxx-exceptions makes is that it results in libunwind having _Unwind_ RaiseException (and likely other functions), which gets called during a C++ throw by __cxa_throw. Without libunwind, this symbol is provided by libgcc_s, whose implementation works correctly. For whatever reason, the one in libunwind, on aarch64, does not succeed in finding a handler and instead calls terminate (which is normal when there is no handler for an exception).