about summary refs log tree commit diff
path: root/tests/ui/traits/next-solver/specialization-transmute.rs
blob: f1447cd6a9e2e955aa440061706b841c109dad34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//@ compile-flags: -Znext-solver
#![feature(specialization)]
//~^ WARN the feature `specialization` is incomplete

trait Default {
    type Id;

    fn intu(&self) -> &Self::Id;
}

impl<T> Default for T {
    default type Id = T;
    fn intu(&self) -> &Self::Id {
        self //~ ERROR mismatched types
    }
}

fn transmute<T: Default<Id = U>, U: Copy>(t: T) -> U {
    *t.intu()
}

use std::num::NonZero;

fn main() {
    let s = transmute::<u8, Option<NonZero<u8>>>(0);
    //~^ ERROR type mismatch resolving `<u8 as Default>::Id == Option<NonZero<u8>>`
    assert_eq!(s, None);
}