## 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 E0390

A method or constant was implemented on a primitive type.

Erroneous code example:

    #![allow(unused)]
    fn main() {
    struct Foo {
        x: i32
    }

    impl *mut Foo {}
    // error: cannot define inherent `impl` for primitive types
    }

This isn't allowed, but using a trait to implement a method or constant is a good solution. Example:

    #![allow(unused)]
    fn main() {
    struct Foo {
        x: i32
    }

    trait Bar {
        fn bar();
    }

    impl Bar for *mut Foo {
        fn bar() {} // ok!
    }
    }

Instead of defining an inherent implementation on a reference, you could also move the reference inside the implementation:

    #![allow(unused)]
    fn main() {
    struct Foo;

    impl &Foo { // error: no nominal type found for inherent implementation
        fn bar(self, other: Self) {}
    }
    }

becomes

    #![allow(unused)]
    fn main() {
    struct Foo;

    impl Foo {
        fn bar(&self, other: &Self) {}
    }
    }