use std::ops::Deref;
struct MyBox<T>(T);
impl<T> MyBox<T> {
fn new(x: T) -> MyBox<T> {
MyBox(x)
}
}
//impl<T> Deref for MyBox<T> {
// type Target = T;
//
// fn deref(&self) -> &T {
// &self.0
// }
//}
fn hello(name: &str) {
println!("Hello, {}!", name);
}
fn main() {
let m = MyBox::new(String::from("Rust"));
hello(&m);
}
cargo build
Compiling hello_world v0.1.0 (/data2/rust/coercion2)
warning: unused import: `std::ops::Deref`
--> src/main.rs:1:5
|
1 | use std::ops::Deref;
| ^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
error[E0308]: mismatched types
--> src/main.rs:23:11
|
23 | hello(&m);
| ^^ expected `str`, found struct `MyBox`
|
= note: expected reference `&str`
found reference `&MyBox<std::string::String>`
error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0308`.
error: could not compile `hello_world`.
To learn more, run the command again with --verbose.