diff options
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0120.md')
-rw-r--r-- | compiler/rustc_error_codes/src/error_codes/E0120.md | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0120.md b/compiler/rustc_error_codes/src/error_codes/E0120.md new file mode 100644 index 000000000..dc7258d87 --- /dev/null +++ b/compiler/rustc_error_codes/src/error_codes/E0120.md @@ -0,0 +1,38 @@ +Drop was implemented on a trait, which is not allowed: only structs and +enums can implement Drop. + +Erroneous code example: + +```compile_fail,E0120 +trait MyTrait {} + +impl Drop for MyTrait { + fn drop(&mut self) {} +} +``` + +A workaround for this problem is to wrap the trait up in a struct, and implement +Drop on that: + +``` +trait MyTrait {} +struct MyWrapper<T: MyTrait> { foo: T } + +impl <T: MyTrait> Drop for MyWrapper<T> { + fn drop(&mut self) {} +} + +``` + +Alternatively, wrapping trait objects requires something: + +``` +trait MyTrait {} + +//or Box<MyTrait>, if you wanted an owned trait object +struct MyWrapper<'a> { foo: &'a MyTrait } + +impl <'a> Drop for MyWrapper<'a> { + fn drop(&mut self) {} +} +``` |