]>
Commit | Line | Data |
---|---|---|
60c5eb7d | 1 | // check-pass |
0531ce1d XL |
2 | // Regression test for #48551. Covers a case where duplicate candidates |
3 | // arose during associated type projection. | |
4 | ||
5 | use std::ops::{Mul, MulAssign}; | |
6 | ||
7 | pub trait ClosedMul<Right>: Sized + Mul<Right, Output = Self> + MulAssign<Right> {} | |
8 | impl<T, Right> ClosedMul<Right> for T | |
9 | where | |
10 | T: Mul<Right, Output = T> + MulAssign<Right>, | |
11 | { | |
12 | } | |
13 | ||
14 | pub trait InnerSpace: ClosedMul<<Self as InnerSpace>::Real> { | |
15 | type Real; | |
16 | } | |
17 | ||
18 | pub trait FiniteDimVectorSpace: ClosedMul<<Self as FiniteDimVectorSpace>::Field> { | |
19 | type Field; | |
20 | } | |
21 | ||
22 | pub trait FiniteDimInnerSpace | |
23 | : InnerSpace + FiniteDimVectorSpace<Field = <Self as InnerSpace>::Real> { | |
24 | } | |
25 | ||
26 | pub trait EuclideanSpace: ClosedMul<<Self as EuclideanSpace>::Real> { | |
27 | type Coordinates: FiniteDimInnerSpace<Real = Self::Real> | |
28 | + Mul<Self::Real, Output = Self::Coordinates> | |
29 | + MulAssign<Self::Real>; | |
30 | ||
31 | type Real; | |
32 | } | |
33 | ||
34 | fn main() {} |