self_struct_ctor

The tracking issue for this feature is: [#51994] [#51994]: https://github.com/rust-lang/rust/issues/51994


The self_struct_ctor feature gate lets you use the special Self identifier as a constructor and a pattern.

A simple example is:


# #![allow(unused_variables)]
#![feature(self_struct_ctor)]

#fn main() {
struct ST(i32, i32);

impl ST {
    fn new() -> Self {
        ST(0, 1)
    }

    fn ctor() -> Self {
        Self(1,2)           // constructed by `Self`, it is the same as `ST(1, 2)`
    }

    fn pattern(self) {
        match self {
            Self(x, y) => println!("{} {}", x, y), // used as a pattern
        }
    }
}
#}