Implement ~const Destruct effect goal in the new solver#132329
Merged
Conversation
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 also fixed a subtle bug/limitation of the
NeedsConstDropcheck. Specifically, the "Qualif" API basically treats const drops as totally structural, even though dropping something that has an explicitDropimplementation cannot be structurally decomposed. For example:In this example, when checking if the
Conditional(())rvalue is const-drop, sinceConditionalhas a const destructor, we would previously recurse into the()value and determine it has nothing to drop, which means that it is considered to not need a const drop -- even though droppingConditional(())would mean evaluating the destructor which relies on thatT: const Foobound to hold!This could be fixed alternatively by banning any const conditions on
const Dropimpls, but that really sucks -- that means that basically no interesting const drop impls could be written. We have the capability to totally and intuitively support the right behavior, which I've implemented here.