You tried to use a type which doesn't implement some trait in a place which expected that trait. Erroneous code example: ```compile_fail,E0277 // here we declare the Foo trait with a bar method trait Foo { fn bar(&self); } // we now declare a function which takes an object implementing the Foo trait fn some_func(foo: T) { foo.bar(); } fn main() { // we now call the method with the i32 type, which doesn't implement // the Foo trait some_func(5i32); // error: the trait bound `i32 : Foo` is not satisfied } ``` In order to fix this error, verify that the type you're using does implement the trait. Example: ``` trait Foo { fn bar(&self); } // we implement the trait on the i32 type impl Foo for i32 { fn bar(&self) {} } fn some_func(foo: T) { foo.bar(); // we can now use this method since i32 implements the // Foo trait } fn main() { some_func(5i32); // ok! } ``` Or in a generic context, an erroneous code example would look like: ```compile_fail,E0277 fn some_func(foo: T) { println!("{:?}", foo); // error: the trait `core::fmt::Debug` is not // implemented for the type `T` } fn main() { // We now call the method with the i32 type, // which *does* implement the Debug trait. some_func(5i32); } ``` Note that the error here is in the definition of the generic function. Although we only call it with a parameter that does implement `Debug`, the compiler still rejects the function. It must work with all possible input types. In order to make this example compile, we need to restrict the generic type we're accepting: ``` use std::fmt; // Restrict the input type to types that implement Debug. fn some_func(foo: T) { println!("{:?}", foo); } fn main() { // Calling the method is still fine, as i32 implements Debug. some_func(5i32); // This would fail to compile now: // struct WithoutDebug; // some_func(WithoutDebug); } ``` Rust only looks at the signature of the called function, as such it must already specify all requirements that will be used for every type parameter.