diff options
| -rw-r--r-- | src/test/run-pass/issue-18952.rs | 48 | ||||
| -rw-r--r-- | src/test/run-pass/issue-45510.rs | 27 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-18952.rs b/src/test/run-pass/issue-18952.rs new file mode 100644 index 00000000000..ca2645ca9e5 --- /dev/null +++ b/src/test/run-pass/issue-18952.rs @@ -0,0 +1,48 @@ +// This issue tests fn_traits overloading on arity. + +#![feature(fn_traits)] +#![feature(unboxed_closures)] + +struct Foo; + +impl Fn<(isize, isize)> for Foo { + extern "rust-call" fn call(&self, args: (isize, isize)) -> Self::Output { + println!("{:?}", args); + } +} + +impl FnMut<(isize, isize)> for Foo { + extern "rust-call" fn call_mut(&mut self, args: (isize, isize)) -> Self::Output { + println!("{:?}", args); + } +} + +impl FnOnce<(isize, isize)> for Foo { + type Output = (); + extern "rust-call" fn call_once(self, args: (isize, isize)) -> Self::Output { + println!("{:?}", args); + } +} + +impl Fn<(isize, isize, isize)> for Foo { + extern "rust-call" fn call(&self, args: (isize, isize, isize)) -> Self::Output { + println!("{:?}", args); + } +} + +impl FnMut<(isize, isize, isize)> for Foo { + extern "rust-call" fn call_mut(&mut self, args: (isize, isize, isize)) -> Self::Output { + println!("{:?}", args); + } +} +impl FnOnce<(isize, isize, isize)> for Foo { + type Output = (); + extern "rust-call" fn call_once(self, args: (isize, isize, isize)) -> Self::Output { + println!("{:?}", args); + } +} + +fn main() { + let foo = Foo; + foo(1, 1); +} diff --git a/src/test/run-pass/issue-45510.rs b/src/test/run-pass/issue-45510.rs new file mode 100644 index 00000000000..922a26b9030 --- /dev/null +++ b/src/test/run-pass/issue-45510.rs @@ -0,0 +1,27 @@ +// Test overloaded resolution of fn_traits. + +#![feature(fn_traits)] +#![feature(unboxed_closures)] + +struct Ishmael; +struct Maybe; +struct CallMe; + +impl FnOnce<(Ishmael,)> for CallMe { + type Output = (); + extern "rust-call" fn call_once(self, _args: (Ishmael,)) -> () { + println!("Split your lungs with blood and thunder!"); + } +} + +impl FnOnce<(Maybe,)> for CallMe { + type Output = (); + extern "rust-call" fn call_once(self, _args: (Maybe,)) -> () { + println!("So we just met, and this is crazy"); + } +} + +fn main() { + CallMe(Ishmael); + CallMe(Maybe); +} |
