## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Error code E0161

A value was moved whose size was not known at compile time.

Erroneous code example:

    trait Bar {
        fn f(self);
    }

    impl Bar for i32 {
        fn f(self) {}
    }

    fn main() {
        let b: Box<dyn Bar> = Box::new(0i32);
        b.f();
        // error: cannot move a value of type dyn Bar: the size of dyn Bar cannot
        //        be statically determined
    }

In Rust, you can only move a value when its size is known at compile time.

To work around this restriction, consider "hiding" the value behind a reference: either `&x` or `&mut x`. Since a reference has a fixed size, this lets you move it around as usual. Example:

    trait Bar {
        fn f(&self);
    }

    impl Bar for i32 {
        fn f(&self) {}
    }

    fn main() {
        let b: Box<dyn Bar> = Box::new(0i32);
        b.f();
        // ok!
    }