A very powerful implication of Trait bounds in Rust is that we can implement a trait for any type that implements another trait. These are called blanket implementations, and are used extensively in Rust’s standard library.

For example, we can define that any type that implements the Display trait also implements the ToString trait.

impl<T: Display> ToString for T {
    // --snip--
}