Fixes #94, with unspecified behavior in pointer comparisons. #95
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.
Fixes #94, by replacing unspecified pointer comparisons with well-defined behavior using
std::distance
with the current pointer and the pointer to one-past-the-end of the array.As a simple schematic of why this is important, we have:
As you can if we have already the
x
digits, with an array with10
elements, and try to comparep+8
topend
, we compare after the end of the array. This could optimize to being always true, or the integer arithmetic could wrap, leading to another always-true comparison.The conformant solution is therefore:
std::distance(p, pend) >= 8
, which also optimizes well, so there's no issue of a performance hit (just ensuring the compiler does not cause an undesired optimizations due to unspecified behavior, such as a potential infinite loop).