| An attempt was made to implement `Drop` on a specialization of a generic type. | |
| Erroneous code example: | |
| ```compile_fail,E0367 | |
| trait Foo {} | |
| struct MyStruct<T> { | |
| t: T | |
| } | |
| impl<T: Foo> Drop for MyStruct<T> { | |
| fn drop(&mut self) {} | |
| } | |
| ``` | |
| This code is not legal: it is not possible to specialize `Drop` to a subset of | |
| implementations of a generic type. In order for this code to work, `MyStruct` | |
| must also require that `T` implements `Foo`. Alternatively, another option is | |
| to wrap the generic type in another that specializes appropriately: | |
| ``` | |
| trait Foo{} | |
| struct MyStruct<T> { | |
| t: T | |
| } | |
| struct MyStructWrapper<T: Foo> { | |
| t: MyStruct<T> | |
| } | |
| impl <T: Foo> Drop for MyStructWrapper<T> { | |
| fn drop(&mut self) {} | |
| } | |
| ``` |