Multiple Bounds

We'll cover the following...

I want to write a function, info, that prints out some information about a number. It’s easier if I just show it to you:

Press + to interact
trait Double {
fn double(self) -> Self;
}
impl Double for i32 {
fn double(self) -> i32 { self * 2 }
}
fn info(x: i32) {
println!("Original number: {}", x);
println!("Doubled number: {}", x.double());
println!("Quadrupled number: {}", x.double().double());
}
fn main() {
info(5);
}

Since our info is defined in terms of the double method only, though, it seems like we should be able to parameterize. Try changing the signature from i32 to a type parameter:

Press + to interact
fn info<T: Double>(x: T)

This generates an error message:

error[E0277]: `T` doesn't implement `std::fmt::Display`
  --> src/main.rs:10:37
   |
9  | fn info<T: Double>(x: T) {
   |         -- help: consider further
...