# Error code E0183

Manual implementation of a `Fn*` trait.

Erroneous code example:

    #![allow(unused)]
    fn main() {
    struct MyClosure {
        foo: i32
    }

    impl FnOnce<()> for MyClosure {  // error
        type Output = ();
        extern "rust-call" fn call_once(self, args: ()) -> Self::Output {
            println!("{}", self.foo);
        }
    }
    }

Manually implementing `Fn`, `FnMut` or `FnOnce` is unstable and requires `#![feature(fn_traits, unboxed_closures)]`.

    #![allow(unused)]
    #![feature(fn_traits, unboxed_closures)]

    fn main() {
    struct MyClosure {
        foo: i32
    }

    impl FnOnce<()> for MyClosure {  // ok!
        type Output = ();
        extern "rust-call" fn call_once(self, args: ()) -> Self::Output {
            println!("{}", self.foo);
        }
    }
    }

The arguments must be a tuple representing the argument list. For more info, see the tracking issue: