| // 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` |
| } |