about summary refs log tree commit diff
path: root/tests/ui/use/import_trait_associated_functions.rs
blob: 4dc473404dbd1a3ab157cae71d046c284c751683 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//@ edition:2018
//@ check-pass
#![feature(import_trait_associated_functions)]

use std::collections::HashMap;

use A::{DEFAULT, new};
use Default::default;

struct S {
    a: HashMap<i32, i32>,
}

impl S {
    fn new() -> S {
        S { a: default() }
    }
}

trait A: Sized {
    const DEFAULT: Option<Self> = None;
    fn new() -> Self;
    fn do_something(&self);
}

mod b {
    use super::A::{self, DEFAULT, new};

    struct B();

    impl A for B {
        const DEFAULT: Option<Self> = Some(B());
        fn new() -> Self {
            B()
        }

        fn do_something(&self) {}
    }

    fn f() {
        let b: B = new();
        b.do_something();
        let c: B = DEFAULT.unwrap();
    }
}

impl A for S {
    fn new() -> Self {
        S::new()
    }

    fn do_something(&self) {}
}

fn f() {
    let s: S = new();
    s.do_something();
    let t: Option<S> = DEFAULT;
}

fn main() {}