summaryrefslogtreecommitdiffstats
path: root/src/test/ui/rfcs/rfc-2302-self-struct-ctor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/rfcs/rfc-2302-self-struct-ctor.rs')
-rw-r--r--src/test/ui/rfcs/rfc-2302-self-struct-ctor.rs127
1 files changed, 0 insertions, 127 deletions
diff --git a/src/test/ui/rfcs/rfc-2302-self-struct-ctor.rs b/src/test/ui/rfcs/rfc-2302-self-struct-ctor.rs
deleted file mode 100644
index 1ec20c500..000000000
--- a/src/test/ui/rfcs/rfc-2302-self-struct-ctor.rs
+++ /dev/null
@@ -1,127 +0,0 @@
-// run-pass
-
-#![allow(dead_code)]
-
-use std::fmt::Display;
-
-struct ST1(i32, i32);
-
-impl ST1 {
- fn new() -> Self {
- ST1(0, 1)
- }
-
- fn ctor() -> Self {
- Self(1,2) // Self as a constructor
- }
-
- fn pattern(self) {
- match self {
- Self(x, y) => println!("{} {}", x, y), // Self as a pattern
- }
- }
-}
-
-struct ST2<T>(T); // With type parameter
-
-impl<T> ST2<T> where T: Display {
-
- fn ctor(v: T) -> Self {
- Self(v)
- }
-
- fn pattern(&self) {
- match self {
- Self(ref v) => println!("{}", v),
- }
- }
-}
-
-struct ST3<'a>(&'a i32); // With lifetime parameter
-
-impl<'a> ST3<'a> {
-
- fn ctor(v: &'a i32) -> Self {
- Self(v)
- }
-
- fn pattern(self) {
- let Self(ref v) = self;
- println!("{}", v);
- }
-}
-
-struct ST4(usize);
-
-impl ST4 {
- fn map(opt: Option<usize>) -> Option<Self> {
- opt.map(Self) // use `Self` as a function passed somewhere
- }
-}
-
-struct ST5; // unit struct
-
-impl ST5 {
- fn ctor() -> Self {
- Self // `Self` as a unit struct value
- }
-
- fn pattern(self) -> Self {
- match self {
- Self => Self, // `Self` as a unit struct value for matching
- }
- }
-}
-
-struct ST6(i32);
-type T = ST6;
-impl T {
- fn ctor() -> Self {
- ST6(1)
- }
-
- fn type_alias(self) {
- let Self(_x) = match self { Self(x) => Self(x) };
- let _opt: Option<Self> = Some(0).map(Self);
- }
-}
-
-struct ST7<T1, T2>(T1, T2);
-
-impl ST7<i32, usize> {
-
- fn ctor() -> Self {
- Self(1, 2)
- }
-
- fn pattern(self) -> Self {
- match self {
- Self(x, y) => Self(x, y),
- }
- }
-}
-
-fn main() {
- let v1 = ST1::ctor();
- v1.pattern();
-
- let v2 = ST2::ctor(10);
- v2.pattern();
-
- let local = 42;
- let v3 = ST3::ctor(&local);
- v3.pattern();
-
- let v4 = Some(1usize);
- let _ = ST4::map(v4);
-
- let v5 = ST5::ctor();
- v5.pattern();
-
- let v6 = ST6::ctor();
- v6.type_alias();
-
- let v7 = ST7::<i32, usize>::ctor();
- let r = v7.pattern();
- println!("{} {}", r.0, r.1)
-}