//@ run-pass | |
#![feature(fn_traits, unboxed_closures)] | |
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)()); | |
} |