# Static rustc_lint::traits::DYN_DROP

source ·

    pub static DYN_DROP: &Lint

Expand 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>) {}