diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/methods/method-where-clause.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/test/ui/methods/method-where-clause.rs b/src/test/ui/methods/method-where-clause.rs new file mode 100644 index 000000000..01692abf9 --- /dev/null +++ b/src/test/ui/methods/method-where-clause.rs @@ -0,0 +1,34 @@ +// run-pass +// Test that we can use method notation to call methods based on a +// where clause type, and not only type parameters. + + +trait Foo { + fn foo(&self) -> i32; +} + +impl Foo for Option<i32> +{ + fn foo(&self) -> i32 { + self.unwrap_or(22) + } +} + +impl Foo for Option<u32> +{ + fn foo(&self) -> i32 { + self.unwrap_or(22) as i32 + } +} + +fn check<T>(x: Option<T>) -> (i32, i32) + where Option<T> : Foo +{ + let y: Option<T> = None; + (x.foo(), y.foo()) +} + +fn main() { + assert_eq!(check(Some(23u32)), (23, 22)); + assert_eq!(check(Some(23)), (23, 22)); +} |