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_ENABLEDis that ifexceptions are disabled, the code using
expectedmust ensurethat no attempt is ever made to throw an exception.
I think the current implementation of
throw_exceptionisproblematic 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_exceptionactually gets called.Reaching e.g. a
__builtin_unreachableis 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_unreachableisn'timplemented by a lot of embedded compilers (which is what made
me look into this code in the first place).