summaryrefslogtreecommitdiffstats
path: root/src/test/ui/issues/issue-37291/auxiliary/lib.rs
blob: 1b163ee1391cae2eee86945d9c3933ca86f2737f (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
#![crate_type = "lib"]

use std::ops::Mul;

pub trait A {}
pub trait B {
    type AT: A;
}
pub trait C {
    type BT: B;
}

pub struct AV;
impl A for AV {}

pub struct BV;
impl B for BV {
    type AT = AV;
}

pub struct CV;
impl C for CV {
    type BT = BV;
}

pub struct WrapperB<T>(pub T);
pub struct WrapperC<T>(pub T);

impl<C1> Mul<WrapperB<<C1::BT as B>::AT>> for WrapperC<C1>
    where C1: C
{
    type Output = u8;
    fn mul(self, _: WrapperB<<C1::BT as B>::AT>) -> Self::Output {
        loop {}
    }
}
impl<C1> Mul<WrapperC<C1>> for WrapperC<C1> {
    type Output = u8;
    fn mul(self, _: WrapperC<C1>) -> Self::Output {
        loop {}
    }
}