1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
//@ 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)());
}
|