The below code compiles and runs fine:
use std::fmt::Display; fn display(x: &str) { println!("{}", x); } fn main() { let s: &str = "hi there"; display(s); } However, if you change the display function to be
fn display(x: &Display) It gives the following error:
src/main.rs:9:13: 9:14 error: the trait `core::marker::Sized` is not implemented for the type `str` [E0277] src/main.rs:9 display(s); By changing display(s) to display(&s) it works again.
What is going on here? Clearly the type is &str, but when &Display is the input argument it doesn't recognize that.
Note: &34 also works as an argument just fine. Is this because Display is actually implemented for &str and not str?