| // issue #46314 | |
| #![feature(decl_macro)] | |
| #[derive(Debug)] | |
| struct NonCopy(String); | |
| struct Foo { | |
| x: NonCopy, | |
| } | |
| macro copy_modern($foo: ident) { | |
| $foo.x | |
| } | |
| macro_rules! copy_legacy { | |
| ($foo: ident) => { | |
| $foo.x //~ ERROR use of moved value: `foo.x` | |
| } | |
| } | |
| fn assert_two_copies(a: NonCopy, b: NonCopy) { | |
| println!("Got two copies: {:?}, {:?}", a, b); | |
| } | |
| fn main() { | |
| let foo = Foo { x: NonCopy("foo".into()) }; | |
| assert_two_copies(copy_modern!(foo), foo.x); //~ ERROR use of moved value: `foo.x` | |
| assert_two_copies(copy_legacy!(foo), foo.x); //~ ERROR use of moved value: `foo.x` | |
| } |