title: E0119 error with generic trait implementation
body: <p>I have an enum:</p>
  
  <pre><code>enum Field {
      Str(String),
      Integer(i64),
  }
  </code></pre>
  
  <p>I want to do:</p>
  
  <pre><code>impl From&lt;String&gt; for Field {
      fn from(s: String) -&gt; Field {
          Field::Str(s)
      }
  }
  
  impl&lt;I&gt; From&lt;I&gt; for Field where I: Into&lt;i64&gt; + Copy {
      fn from(i: I) -&gt; Field {
          Field::Integer(Into::&lt;i64&gt;::into(i))
      }
  }
  </code></pre>
  
  <p>This code above has an error:</p>
  
  <pre class="lang-none prettyprint-override"><code>error[E0119]: conflicting implementations of trait
  `std::convert::From&lt;std::string::String&gt;` for type `Field`:
  --&gt; &lt;anon&gt;:12:5
     |
  6  |          impl From&lt;String&gt; for Field {
     |  ________- starting here...
  7  | |       fn from(s: String) -&gt; Field {
  8  | |         Field::Str(s)
  9  | |       }
  10 | |     }
     | |_____- ...ending here: first implementation here
  11 | 
  12 |       impl&lt;I&gt; From&lt;I&gt; for Field where I: Into&lt;i64&gt; + Copy {
     |  _____^ starting here...
  13 | |       fn from(i: I) -&gt; Field {
  14 | |         Field::Integer(Into::&lt;i64&gt;::into(i))
  15 | |       }
  16 | |     }
     | |_____^ ...ending here: conflicting implementation for `Field`
  </code></pre>
  
  <p><code>String</code> is not an implementor of <code>Into&lt;i64&gt;</code>, so why does error <code>E0119</code> happen?</p>