Add constexpr support to allocators for C++20 #603
Closed
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.
This adds the
constexpr
attribute on each allocator member function, including ctors and dtors, to enable easier use of these allocators in compile-time execution. A practical example of this would be a modern C++ string class which supports constexpr construction, usage, and destruction. Without this change, the C++ compiler will not allow such a class.An trivial example to show the usage:
This fails to compile before this commit and succeeds afterward. I am using these changes in practice within jank's 0 compiler and runtime here 1.
Note that
constexpr
itself was added in C++11, but it can't apply to destructors until C++20, and it's coming on 2024, so I've skipped over trying to juggle the different levels ofconstexpr
here by just saying if you have C++20, you can do what we need.