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(); }