Terminate in throw_exception
when exceptions are disabled
#106
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
My understanding of
TL_EXPECTED_EXCEPTIONS_ENABLED
is that ifexceptions are disabled, the code using
expected
must ensurethat no attempt is ever made to throw an exception.
I think the current implementation of
throw_exception
isproblematic because the branch in which exceptions are disabled
simply tells the compiler that this code is never reached. This
is most likely not true if
throw_exception
actually gets called.Reaching e.g. a
__builtin_unreachable
is undefined behaviour.I suggest that instead of using compiler-specific builtins, the
code simply calls
std::terminate
. This seems appropriate, aswe pretty much have a case very similar to an uncaught exception.
This also solves the problem that
__builtin_unreachable
isn'timplemented by a lot of embedded compilers (which is what made
me look into this code in the first place).