summaryrefslogtreecommitdiffstats
path: root/src/test/ui/issues/issue-3743.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/issues/issue-3743.rs')
-rw-r--r--src/test/ui/issues/issue-3743.rs55
1 files changed, 0 insertions, 55 deletions
diff --git a/src/test/ui/issues/issue-3743.rs b/src/test/ui/issues/issue-3743.rs
deleted file mode 100644
index 07741914f..000000000
--- a/src/test/ui/issues/issue-3743.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-// run-pass
-// If `Mul` used an associated type for its output, this test would
-// work more smoothly.
-
-use std::ops::Mul;
-
-#[derive(Copy, Clone)]
-struct Vec2 {
- x: f64,
- y: f64
-}
-
-// methods we want to export as methods as well as operators
-impl Vec2 {
-#[inline(always)]
- fn vmul(self, other: f64) -> Vec2 {
- Vec2 { x: self.x * other, y: self.y * other }
- }
-}
-
-// Right-hand-side operator visitor pattern
-trait RhsOfVec2Mul {
- type Result;
-
- fn mul_vec2_by(&self, lhs: &Vec2) -> Self::Result;
-}
-
-// Vec2's implementation of Mul "from the other side" using the above trait
-impl<Res, Rhs: RhsOfVec2Mul<Result=Res>> Mul<Rhs> for Vec2 {
- type Output = Res;
-
- fn mul(self, rhs: Rhs) -> Res { rhs.mul_vec2_by(&self) }
-}
-
-// Implementation of 'f64 as right-hand-side of Vec2::Mul'
-impl RhsOfVec2Mul for f64 {
- type Result = Vec2;
-
- fn mul_vec2_by(&self, lhs: &Vec2) -> Vec2 { lhs.vmul(*self) }
-}
-
-// Usage with failing inference
-pub fn main() {
- let a = Vec2 { x: 3.0f64, y: 4.0f64 };
-
- // the following compiles and works properly
- let v1: Vec2 = a * 3.0f64;
- println!("{} {}", v1.x, v1.y);
-
- // the following compiles but v2 will not be Vec2 yet and
- // using it later will cause an error that the type of v2
- // must be known
- let v2 = a * 3.0f64;
- println!("{} {}", v2.x, v2.y); // error regarding v2's type
-}