summaryrefslogtreecommitdiffstats
path: root/src/test/ui/associated-types/issue-48551.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/associated-types/issue-48551.rs')
-rw-r--r--src/test/ui/associated-types/issue-48551.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/issue-48551.rs b/src/test/ui/associated-types/issue-48551.rs
new file mode 100644
index 000000000..b95a4832b
--- /dev/null
+++ b/src/test/ui/associated-types/issue-48551.rs
@@ -0,0 +1,34 @@
+// check-pass
+// Regression test for #48551. Covers a case where duplicate candidates
+// arose during associated type projection.
+
+use std::ops::{Mul, MulAssign};
+
+pub trait ClosedMul<Right>: Sized + Mul<Right, Output = Self> + MulAssign<Right> {}
+impl<T, Right> ClosedMul<Right> for T
+where
+ T: Mul<Right, Output = T> + MulAssign<Right>,
+{
+}
+
+pub trait InnerSpace: ClosedMul<<Self as InnerSpace>::Real> {
+ type Real;
+}
+
+pub trait FiniteDimVectorSpace: ClosedMul<<Self as FiniteDimVectorSpace>::Field> {
+ type Field;
+}
+
+pub trait FiniteDimInnerSpace
+ : InnerSpace + FiniteDimVectorSpace<Field = <Self as InnerSpace>::Real> {
+}
+
+pub trait EuclideanSpace: ClosedMul<<Self as EuclideanSpace>::Real> {
+ type Coordinates: FiniteDimInnerSpace<Real = Self::Real>
+ + Mul<Self::Real, Output = Self::Coordinates>
+ + MulAssign<Self::Real>;
+
+ type Real;
+}
+
+fn main() {}