title: Cannot move out of *** which is behind a shared reference
body: <p>I'm learning Rust and I've a question regarding how to pass a reference of a variable to a funcion and make a cascade call with it.</p>
  
  <p>I'm facing the error indicated in the code bellow:</p>
  
  <pre><code>struct User {
      name: String,
      address: String
  }
  
  // Argument "user" is intentionaly a reference to User struct;
  //
  fn func1(user: &amp;User) {
      println!("func1: {}, {}", user.name, user.address);
  
      // error[E0507]: cannot move out of `*user` which is behind a shared reference
      //
      func2(*user);
  }
  
  // Argument "user" is intentionaly an instance of User struct;
  //
  fn func2(user: User) {
      println!("func2: {}, {}", user.name, user.address);
  }
  
  fn main() {
      let user = User {
          name: String::from("George"),
          address: String::from("Main Street")
      };
  
      func1(&amp;user);
  }
  </code></pre>
  
  <p>Why can't I do that? What I supposed to do?</p>
  
  <p>I think cloning the User object is not a option. Imagine if instead of this simple structure we have a super structure that could occupy several MBytes?</p>