# Why can't I \`impl\<E\> From\<E\> for EzError where E: StdError + Send\`?

**URL:** <https://internals.rust-lang.org/t/why-cant-i-impl-e-from-e-for-ezerror-where-e-stderror-send/3857>\
**Category:** Uncategorized\
**Created:** [August 14, 2016, 6:04pm UTC](https://internals.rust-lang.org/t/why-cant-i-impl-e-from-e-for-ezerror-where-e-stderror-send/3857 "2016-08-14T18:04:44Z")\
**Posts on this page:** 1\
**Showing post:** 12

<div class="post-metadata">

**Author:** ![stebalien](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/stebalien/32/228_2.png) [@stebalien](https://internals.rust-lang.org/u/stebalien)\
**Post date:** [August 15, 2016, 2:49am UTC](https://internals.rust-lang.org/t/why-cant-i-impl-e-from-e-for-ezerror-where-e-stderror-send/3857/12 "2016-08-15T02:49:34Z")

</div>

In the past there have been problems with negative trait bounds because adding a trait implementation would become a breaking change (sort of, see [RFC #1658](https://github.com/rust-lang/rfcs/pull/1658)). However, negative equality bounds don’t have this problem at all.

Also, a more general (unstable) solution to the above problem is:

```rust
#![feature(optin_builtin_traits)]
pub trait NotSame {}
impl NotSame for .. {}
impl<T> !NotSame for (T, T) {}

// Example: usage:
trait Trait<T> {}
impl<T> Trait<T> for T {}
impl<A, B> Trait<A> for B where (A, B): NotSame {}

```

---

_[View the full topic](https://internals.rust-lang.org/t/why-cant-i-impl-e-from-e-for-ezerror-where-e-stderror-send/3857)._
