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