title: Why are `Item`s of a `Char` iterator, obtained from calling `chars` on a string slice, not references to `char`s?
body: <p>Running the following code will cause the compiler to complain that <code>PairedNumbers::get</code> returns <code>(char, char)</code> and not <code>(&amp;char, &amp;char)</code>:</p>
  
  <pre><code>use std::iter::{Zip, Cycle, Skip};
  use std::str::Chars;
  
  struct PairedNumbers&lt;'a&gt; {
      char_pairs: Zip&lt;Cycle&lt;Chars&lt;'a&gt;&gt;, Skip&lt;Cycle&lt;Chars&lt;'a&gt;&gt;&gt;&gt;,
      counter: usize,
  }
  
  impl&lt;'a, 'b: 'a&gt; PairedNumbers&lt;'a&gt; {
      fn new(num_str: &amp;'b str, jump: usize) -&gt; PairedNumbers&lt;'a&gt; {
          PairedNumbers {
              char_pairs: num_str.chars().cycle().zip(num_str.chars().cycle().skip(jump)),
              counter: 0,
          }
      }
  
      fn get(&amp;'a mut self) -&gt; (&amp;'a char, &amp;'a char) {
          self.counter = self.counter + 1;
          self.char_pairs.next().expect("could not get char pair from unparsed_pairs!")
      }
  }
  </code></pre>
  
  <p>We see that the <code>PairedNumbers</code> struct is initialized by making iterators (<code>Chars</code> to be specific) over the characters of the string slice. Given that <code>&amp;str</code> is a reference to a particular region of memory (I am assuming a contiguous region?), wouldn't <code>Chars</code> really be iterating over references to the the component <code>char</code>s that make up the <code>str</code>? Is Rust's auto-dereferencing at play here?</p>