]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/impl-trait-in-bindings.rs
Auto merge of #60763 - matklad:tt-parser, r=petrochenkov
[rust.git] / src / test / run-pass / impl-trait-in-bindings.rs
1 #![feature(impl_trait_in_bindings)]
2 //~^ WARN the feature `impl_trait_in_bindings` is incomplete and may cause the compiler to crash
3
4 use std::fmt::Debug;
5
6 const FOO: impl Debug + Clone + PartialEq<i32> = 42;
7
8 static BAR: impl Debug + Clone + PartialEq<i32> = 42;
9
10 fn a<T: Clone>(x: T) {
11     let y: impl Clone = x;
12     let _ = y.clone();
13 }
14
15 fn b<T: Clone>(x: T) {
16     let f = move || {
17         let y: impl Clone = x;
18         let _ = y.clone();
19     };
20     f();
21 }
22
23 trait Foo<T: Clone> {
24     fn a(x: T) {
25         let y: impl Clone = x;
26         let _ = y.clone();
27     }
28 }
29
30 impl<T: Clone> Foo<T> for i32 {
31     fn a(x: T) {
32         let y: impl Clone = x;
33         let _ = y.clone();
34     }
35 }
36
37 fn main() {
38     let foo: impl Debug + Clone + PartialEq<i32> = 42;
39
40     assert_eq!(FOO.clone(), 42);
41     assert_eq!(BAR.clone(), 42);
42     assert_eq!(foo.clone(), 42);
43
44     a(42);
45     b(42);
46     i32::a(42);
47 }