storage: fix UB taking pointer to inner type T #6
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.
Casting the pointer
Storage<T>::value_
toT
is undefined according to the standard [basic.life/8], as it violates item (8.2), since the types are not equal [1].Therefore, we need to launder the pointer after reinterpreting it.
See also the examples in std::launder[2] and std::aligned_storage [3].
Not sure I follow your style correctly, please let me know.
Best
[1] https://timsong-cpp.github.io/cppwp/n4868/basic.life#8
[2] https://en.cppreference.com/w/cpp/utility/launder
[3] https://en.cppreference.com/w/cpp/types/aligned_storage
[4] https://timsong-cpp.github.io/cppwp/n4868/ptr.launder