Auto merge of #121676 - Bryanskiy:polarity, r=petrochenkov
Support ?Trait bounds in supertraits and dyn Trait under a feature gate This patch allows `maybe` polarity bounds under a feature gate. The only language change here is that corresponding hard errors are replaced by feature gates. Example: ```rust #![feature(allow_maybe_polarity)] ... trait Trait1 : ?Trait { ... } // ok fn foo(_: Box<(dyn Trait2 + ?Trait)>) {} // ok fn bar<T: ?Sized + ?Trait>(_: &T) {} // ok ``` Maybe bounds still don't do anything (except for `Sized` trait), however this patch will allow us to [experiment with default auto traits](https://github.com/rust-lang/rust/pull/120706#issuecomment-1934006762). This is a part of the [MCP: Low level components for async drop](https://github.com/rust-lang/compiler-team/issues/727)
This commit is contained in:
commit
7c2012d0ec
36 changed files with 364 additions and 83 deletions
|
@ -300,13 +300,16 @@ impl<'a> State<'a> {
|
|||
self.word_space("dyn");
|
||||
}
|
||||
let mut first = true;
|
||||
for bound in bounds {
|
||||
for (bound, modifier) in bounds {
|
||||
if first {
|
||||
first = false;
|
||||
} else {
|
||||
self.nbsp();
|
||||
self.word_space("+");
|
||||
}
|
||||
if *modifier == TraitBoundModifier::Maybe {
|
||||
self.word("?");
|
||||
}
|
||||
self.print_poly_trait_ref(bound);
|
||||
}
|
||||
if !lifetime.is_elided() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue