Use abort() instead of exit() in default_report_error_callback()
exit()
performs some clean-ups that may lead to assert, for example calling the destructor of a static allocator whose memory blocks are not freed yet.
We don't care about these asserts since we are forcefully leaving the program, and it can be confusing to let them happen.