summaryrefslogtreecommitdiffstats
path: root/src/test/ui/specialization/issue-70442.rs
blob: d41b5355c2cded91a2db374db9e96214be95a947 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#![feature(specialization)] //~ WARN the feature `specialization` is incomplete

// check-pass

trait Trait {
    type Assoc;
}

impl<T> Trait for T {
    default type Assoc = bool;
}

// This impl inherits the `Assoc` definition from above and "locks it in", or finalizes it, making
// child impls unable to further specialize it. However, since the specialization graph didn't
// correctly track this, we would refuse to project `Assoc` from this impl, even though that should
// happen for items that are final.
impl Trait for () {}

fn foo<X: Trait<Assoc=bool>>() {}

fn main() {
    foo::<()>();  // `<() as Trait>::Assoc` is normalized to `bool` correctly
}