title: What is the syntax and semantics of the `where` keyword?
body: <p>Unfortunately, Rust's documentation regarding <code>where</code> is very lacking. The keyword only appears in one or two unrelated examples in the reference.</p>
  
  <ol>
  <li><p>What semantic difference does <code>where</code> make in the following code? Is there any difference at all? Which form is preferred?</p>
  
  <pre><code>fn double_a&lt;T&gt;(a:T) -&gt; T where T:std::num::Int {
      a+a
  }
  
  fn double_b&lt;T: std::num::Int&gt;(a:T) -&gt; T {
      a+a
  }
  </code></pre></li>
  <li><p>In the implementation of the CharEq trait, it seems that <code>where</code> is being used as some sort of "selector" to implement Trait for anything that matches some closure type. Am I correct?</p></li>
  </ol>
  
  <p>Is there any way I can get a better, more complete picture of <code>where</code>? (full specification of usage and syntax)</p>