fix #26453, require obviously-concrete lower bound for a var to be diagonal #26567
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 changes method applicability, but is only very slightly breaking, since vars whose lower bounds are other vars are pretty rare in method signatures. Also in such methods the resulting static parameters tend to be undefined, since there is no unique value for them.
Overall I think this makes subtyping a bit more intuitive. Here, I chose to make a var non-diagonal if its lower bound is another var. A possible variation is to make it diagonal if the lower bound var itself has a concrete upper bound (e.g. in
S<:Int, T>:S
,T
could still be diagonal).