diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs index be1fdc4594d05..14ae7c9900c46 100644 --- a/src/libstd/macros.rs +++ b/src/libstd/macros.rs @@ -145,16 +145,18 @@ macro_rules! format( #[macro_export] macro_rules! write( - ($dst:expr, $($arg:tt)*) => ( - format_args!(|args| { ::std::fmt::write($dst, args) }, $($arg)*) - ) + ($dst:expr, $($arg:tt)*) => ({ + let dst: &mut ::std::io::Writer = $dst; + format_args!(|args| { ::std::fmt::write(dst, args) }, $($arg)*) + }) ) #[macro_export] macro_rules! writeln( - ($dst:expr, $($arg:tt)*) => ( - format_args!(|args| { ::std::fmt::writeln($dst, args) }, $($arg)*) - ) + ($dst:expr, $($arg:tt)*) => ({ + let dst: &mut ::std::io::Writer = $dst; + format_args!(|args| { ::std::fmt::writeln(dst, args) }, $($arg)*) + }) ) #[macro_export] diff --git a/src/test/run-pass/colorful-write-macros.rs b/src/test/run-pass/colorful-write-macros.rs new file mode 100644 index 0000000000000..55bac0a0e078c --- /dev/null +++ b/src/test/run-pass/colorful-write-macros.rs @@ -0,0 +1,28 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[allow(unused_must_use, dead_code)]; + +use std::io::MemWriter; + +struct Foo<'a> { + writer: &'a mut Writer, + other: &'a str, +} + +fn borrowing_writer_from_struct_and_formatting_struct_field(foo: Foo) { + write!(foo.writer, "{}", foo.other); +} + +pub fn main() { + let mut w = MemWriter::new(); + write!(&mut w as &mut Writer, ""); + write!(&mut w, ""); // should coerce +}