How is there a conflicting implementation of `From` when using a generic type?
<p>I'm trying to implement an error enum which can contain an error associated with one of our traits like this:</p>

<pre><code>trait Storage {
    type Error;
}

enum MyError&lt;S: Storage&gt; {
    StorageProblem(S::Error),
}
</code></pre>

<p>I have also tried to implement the <code>From</code> trait to allow construction of <code>MyError</code> from an instance of a <code>Storage::Error</code>:</p>

<pre><code>impl&lt;S: Storage&gt; From&lt;S::Error&gt; for MyError&lt;S&gt; {
    fn from(error: S::Error) -&gt; MyError&lt;S&gt; {
        MyError::StorageProblem(error)
    }
}
</code></pre>

<p>(<a href="https://play.rust-lang.org/?gist=30ff7a5205117f0a22c58b965609bd95&amp;version=stable" rel="noreferrer">playground</a>)</p>

<p>However this fails to compile:</p>

<pre class="lang-none prettyprint-override"><code>error[E0119]: conflicting implementations of trait `std::convert::From&lt;MyError&lt;_&gt;&gt;` for type `MyError&lt;_&gt;`:
 --&gt; src/lib.rs:9:1
  |
9 | impl&lt;S: Storage&gt; From&lt;S::Error&gt; for MyError&lt;S&gt; {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: conflicting implementation in crate `core`:
          - impl&lt;T&gt; std::convert::From&lt;T&gt; for T;
</code></pre>

<p>I don't understand why the compiler reckons this has already been implemented.  The error message is telling me that there's already an implementation of <code>From&lt;MyError&lt;_&gt;&gt;</code> (which there is), but I'm not trying to implement that here - I'm trying to implement <code>From&lt;S::Error&gt;</code> and <code>MyError</code> is not the same type as <code>S::Error</code> from what I can see.</p>

<p>Am I missing something fundamental to generics here?</p>