Skip to main content

## SELF_CONSTRUCTOR_FROM_OUTER_ITEM

# Static SELF_CONSTRUCTOR_FROM_OUTER_ITEM

Source

    pub static SELF_CONSTRUCTOR_FROM_OUTER_ITEM: &'static Lint

Expand description

The `self_constructor_from_outer_item` lint detects cases where the `Self` constructor was silently allowed due to a bug in the resolver, and which may produce surprising and unintended behavior.

Using a `Self` type alias from an outer item was never intended, but was silently allowed. This is deprecated – and is a hard error when the `Self` type alias references generics that are not in scope.

#### §Example

ⓘ

    #![deny(self_constructor_from_outer_item)]

    struct S0(usize);

    impl S0 {
        fn foo() {
            const C: S0 = Self(0);
            fn bar() -> S0 {
                Self(0)
            }
        }
    }

{{produces}}

#### §Explanation

The `Self` type alias should not be reachable because nested items are not associated with the scope of the parameters from the parent item.