# Error code E0493

A value with a custom `Drop` implementation may be dropped during const-eval.

Erroneous code example:

    #![allow(unused)]
    fn main() {
    enum DropType {
        A,
    }

    impl Drop for DropType {
        fn drop(&mut self) {}
    }

    struct Foo {
        field1: DropType,
    }

    static FOO: Foo = Foo { field1: (DropType::A, DropType::A).1 }; // error!
    }

The problem here is that if the given type or one of its fields implements the `Drop` trait, this `Drop` implementation cannot be called within a const context since it may run arbitrary, non-const-checked code. To prevent this issue, ensure all values with a custom `Drop` implementation escape the initializer.

    #![allow(unused)]
    fn main() {
    enum DropType {
        A,
    }

    impl Drop for DropType {
        fn drop(&mut self) {}
    }

    struct Foo {
        field1: DropType,
    }

    static FOO: Foo = Foo { field1: DropType::A }; // We initialize all fields
                                                   // by hand.
    }