title: Cannot use moved BufReader after for loop with bufreader.lines()
body: <p>I'm trying to read some lines from a file, skipping the first few and printing the rest, but I keep getting errors about used value after move:</p>
  
  <pre><code>use std::fs::File;
  use std::io::{self, BufRead, BufReader, Read};
  use std::path::Path;
  
  fn skip_and_print_file(skip: &amp;usize, path: &amp;Path) {
      let mut skip: usize = *skip;
  
      if let Ok(file) = File::open(path) {
          let mut buffer = BufReader::new(file);
          for (index, line) in buffer.lines().enumerate() {
              if index &gt;= skip {
                  break;
              }
          }
          print_to_stdout(&amp;mut buffer);
      }
  }
  
  fn print_to_stdout(mut input: &amp;mut Read) {
      let mut stdout = io::stdout();
      io::copy(&amp;mut input, &amp;mut stdout);
  }
  
  fn main() {}
  </code></pre>
  
  <p>This is the error I'm getting:</p>
  
  <pre class="lang-none prettyprint-override"><code>error[E0382]: use of moved value: `buffer`
    --&gt; src/main.rs:15:30
     |
  10 |         for (index, line) in buffer.lines().enumerate() {
     |                              ------ value moved here
  ...
  15 |         print_to_stdout(&amp;mut buffer);
     |                              ^^^^^^ value used here after move
     |
     = note: move occurs because `buffer` has type `std::io::BufReader&lt;std::fs::File&gt;`, which does not implement the `Copy` trait
  </code></pre>