Static rustc_lint_defs::builtin::CENUM_IMPL_DROP_CAST
source · pub static CENUM_IMPL_DROP_CAST: &LintExpand description
The cenum_impl_drop_cast lint detects an as cast of a field-less
enum that implements Drop.
§Example
ⓘ
enum E {
A,
}
impl Drop for E {
fn drop(&mut self) {
println!("Drop");
}
}
fn main() {
let e = E::A;
let i = e as u32;
}{{produces}}
§Explanation
Casting a field-less enum that does not implement Copy to an
integer moves the value without calling drop. This can result in
surprising behavior if it was expected that drop should be called.
Calling drop automatically would be inconsistent with other move
operations. Since neither behavior is clear or consistent, it was
decided that a cast of this nature will no longer be allowed.
This is a future-incompatible lint to transition this to a hard error in the future. See issue #73333 for more details.