title: Using loop variable from ".." loop causes type conversion?
body: <p>I have a really simple timing loop that users <code>..</code> up to a maximum.  However, when I <strong>use</strong> the loop variable inside the block (here as an index) it appears to cause the variable type to change.  If I <em>do not</em> touch the loop variable then the stopwatch has no issue.  </p>
  
  <pre><code>let sw = Stopwatch::start_new();
  let all_data = vec!["a", "b", "c", "d", "e"];
  let iters = 2;
  for x in 0..iters {
      println!("Message: {:?}", all_data[x]);
  }
  println!("Thing took {}ms per", sw.elapsed_ms() / iters);
  </code></pre>
  
  <p>This give me a type error when printing out the elapsed time.  It appears to have changed to a <code>usize</code>?</p>
  
  <p>I can fix this by using <code>all_data[x as usize]</code> though.  Is Rust actually changing the actual variable somehow, or is the type inference just taking the very last usage and assuming that type? </p>
  
  <pre><code>src/main.rs:95:55: 95:58 error: mismatched types [E0308]
  src/main.rs:95     println!("Thing took {}ms per", sw.elapsed_ms() / iters);
                                                                       ^~~
  &lt;std macros&gt;:2:27: 2:58 note: in this expansion of format_args!
  &lt;std macros&gt;:3:1: 3:54 note: in this expansion of print! (defined in &lt;std macros&gt;)
  src/main.rs:95:5: 95:60 note: in this expansion of println! (defined in &lt;std macros&gt;)
  src/main.rs:95:55: 95:58 help: run `rustc --explain E0308` to see a detailed explanation
  src/main.rs:95:55: 95:58 note: expected type `i64`
  src/main.rs:95:55: 95:58 note:    found type `usize`
  src/main.rs:95:37: 95:58 error: the trait bound `i64: std::ops::Div&lt;usize&gt;` is not satisfied [E0277]
  src/main.rs:95     println!("Thing took {}ms per", sw.elapsed_ms() / iters);
  </code></pre>