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

You need to specify a specific implementation of the trait in order to call the method.

Erroneous code example:

    #![allow(unused)]
    fn main() {
    trait Coroutine {
        fn create() -> u32;
    }

    struct Impl;

    impl Coroutine for Impl {
        fn create() -> u32 { 1 }
    }

    struct AnotherImpl;

    impl Coroutine for AnotherImpl {
        fn create() -> u32 { 2 }
    }

    let cont: u32 = Coroutine::create();
    // error, impossible to choose one of Coroutine trait implementation
    // Should it be Impl or AnotherImpl, maybe something else?
    }

This error can be solved by adding type annotations that provide the missing information to the compiler. In this case, the solution is to use a concrete type:

    #![allow(unused)]
    fn main() {
    trait Coroutine {
        fn create() -> u32;
    }

    struct AnotherImpl;

    impl Coroutine for AnotherImpl {
        fn create() -> u32 { 2 }
    }

    let gen1 = AnotherImpl::create();

    // if there are multiple methods with same name (different traits)
    let gen2 = <AnotherImpl as Coroutine>::create();
    }