summaryrefslogtreecommitdiffstats
path: root/src/test/ui/traits/issue-68295.rs
blob: 7ff54539adc5bb721c5f41797b3b407503246300 (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// check-fail
//
// regression test for #68295

struct Matrix<R, C, S>(R, C, S);

impl<R, C, S> Matrix<R, C, S> {
    fn into_owned(self) -> Matrix<R, C, Owned<R, C, ()>>
    where
        (): Allocator<R, C>,
    {
        unimplemented!()
    }
}

impl<D, S> Matrix<D, D, S> {
    fn hermitian_part(&self) -> Matrix<D, D, Owned<D, D, ()>>
    where
        (): Allocator<D, D>,
    {
        unimplemented!()
    }
}

trait Allocator<R, C> {
    type Buffer;
}

trait Trait<R, C, A> {
    type Power;
}

impl<R, C, A: Allocator<R, C>> Trait<R, C, A> for () {
    type Power = A::Buffer;
}

type Owned<R, C, G> = <G as Trait<R, C, ()>>::Power;

fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32>
where
    (): Allocator<R, C>,
{
    input.into_owned()
    //~^ ERROR mismatched types [E0308]
}

fn main() {}