Enum rustc::ty::util::ExplicitSelf [] [src]

pub enum ExplicitSelf<'tcx> {
    ByValue,
    ByReference(Region<'tcx>, Mutability),
    ByBox,
    Other,
}
🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Variants

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Methods

impl<'tcx> ExplicitSelf<'tcx>
[src]

[src]

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Categorizes an explicit self declaration like self: SomeType into either self, &self, &mut self, Box<self>, or Other. This is mainly used to require the arbitrary_self_types feature in the case of Other, to improve error messages in the common cases, and to make Other non-object-safe.

Examples:

impl<'a> Foo for &'a T {
    // Legal declarations:
    fn method1(self: &&'a T); // ExplicitSelf::ByReference
    fn method2(self: &'a T); // ExplicitSelf::ByValue
    fn method3(self: Box<&'a T>); // ExplicitSelf::ByBox
    fn method4(self: Rc<&'a T>); // ExplicitSelf::Other

    // Invalid cases will be caught by `check_method_receiver`:
    fn method_err1(self: &'a mut T); // ExplicitSelf::Other
    fn method_err2(self: &'static T) // ExplicitSelf::ByValue
    fn method_err3(self: &&T) // ExplicitSelf::ByReference
}