Static rustc_lint::traits::DYN_DROP
source · pub static DYN_DROP: &LintExpand description
The dyn_drop lint checks for trait objects with std::ops::Drop.
§Example
fn foo(_x: Box<dyn Drop>) {}{{produces}}
§Explanation
A trait object bound of the form dyn Drop is most likely misleading
and not what the programmer intended.
Drop bounds do not actually indicate whether a type can be trivially
dropped or not, because a composite type containing Drop types does
not necessarily implement Drop itself. Naïvely, one might be tempted
to write a deferred drop system, to pull cleaning up memory out of a
latency-sensitive code path, using dyn Drop trait objects. However,
this breaks down e.g. when T is String, which does not implement
Drop, but should probably be accepted.
To write a trait object bound that accepts anything, use a placeholder trait with a blanket implementation.
trait Placeholder {}
impl<T> Placeholder for T {}
fn foo(_x: Box<dyn Placeholder>) {}