//@ run-pass #![allow(dead_code)] use std::io::Write; use std::fmt; struct Foo<'a> { writer: &'a mut (dyn Write+'a), other: &'a str, } struct Bar; impl fmt::Write for Bar { fn write_str(&mut self, _: &str) -> fmt::Result { Ok(()) } } fn borrowing_writer_from_struct_and_formatting_struct_field(foo: Foo) { write!(foo.writer, "{}", foo.other).unwrap(); } fn main() { let mut w = Vec::new(); write!(&mut w as &mut dyn Write, "").unwrap(); write!(&mut w, "").unwrap(); // should coerce println!("ok"); let mut s = Bar; { use std::fmt::Write; write!(&mut s, "test").unwrap(); } }