| #### Note: this error code is no longer emitted by the compiler. | |
| `where` clauses must use generic type parameters: it does not make sense to use | |
| them otherwise. An example causing this error: | |
| ``` | |
| trait Foo { | |
| fn bar(&self); | |
| } | |
| #[derive(Copy,Clone)] | |
| struct Wrapper<T> { | |
| Wrapped: T | |
| } | |
| impl Foo for Wrapper<u32> where Wrapper<u32>: Clone { | |
| fn bar(&self) { } | |
| } | |
| ``` | |
| This use of a `where` clause is strange - a more common usage would look | |
| something like the following: | |
| ``` | |
| trait Foo { | |
| fn bar(&self); | |
| } | |
| #[derive(Copy,Clone)] | |
| struct Wrapper<T> { | |
| Wrapped: T | |
| } | |
| impl <T> Foo for Wrapper<T> where Wrapper<T>: Clone { | |
| fn bar(&self) { } | |
| } | |
| ``` | |
| Here, we're saying that the implementation exists on Wrapper only when the | |
| wrapped type `T` implements `Clone`. The `where` clause is important because | |
| some types will not implement `Clone`, and thus will not get this method. | |
| In our erroneous example, however, we're referencing a single concrete type. | |
| Since we know for certain that `Wrapper<u32>` implements `Clone`, there's no | |
| reason to also specify it in a `where` clause. |