diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/issues/issue-13655.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-13655.rs b/src/test/ui/issues/issue-13655.rs new file mode 100644 index 000000000..6dd184799 --- /dev/null +++ b/src/test/ui/issues/issue-13655.rs @@ -0,0 +1,32 @@ +// run-pass +#![feature(fn_traits, unboxed_closures)] +use std::ops::Fn; + +struct Foo<T>(T); + +impl<T: Copy> Fn<()> for Foo<T> { + extern "rust-call" fn call(&self, _: ()) -> T { + match *self { + Foo(t) => t + } + } +} + +impl<T: Copy> FnMut<()> for Foo<T> { + extern "rust-call" fn call_mut(&mut self, _: ()) -> T { + self.call(()) + } +} + +impl<T: Copy> FnOnce<()> for Foo<T> { + type Output = T; + + extern "rust-call" fn call_once(self, _: ()) -> T { + self.call(()) + } +} + +fn main() { + let t: u8 = 1; + println!("{}", Foo(t)()); +} |