]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/traits/alias/bounds.rs
3 #![feature(trait_alias)]
5 use std
::marker
::PhantomData
;
8 trait EmptyAlias
= Empty
;
9 trait CloneDefault
= Clone
+ Default
;
10 trait SendSyncAlias
= Send
+ Sync
;
11 trait WhereSendAlias
= where Self: Send
;
12 trait SendEqAlias
<T
> = Send
where T
: PartialEq
<Self>;
13 trait I32Iterator
= Iterator
<Item
= i32>;
16 struct Foo
<T
: SendSyncAlias
>(PhantomData
<T
>);
18 struct Bar
<T
>(PhantomData
<T
>) where T
: SendSyncAlias
;
20 impl dyn EmptyAlias {}
22 impl<T
: SendSyncAlias
> Empty
for T {}
24 fn a
<T
: CloneDefault
>() -> (T
, T
) {
25 let one
= T
::default();
26 let two
= one
.clone();
30 fn b(x
: &impl SendEqAlias
<i32>) -> bool
{
34 fn c
<T
: I32Iterator
>(x
: &mut T
) -> Option
<i32> {
38 fn d
<T
: SendSyncAlias
>() {
39 is_send_and_sync
::<T
>();
42 fn is_send_and_sync
<T
: Send
+ Sync
>() {}
45 let both
= a
::<i32>();
46 assert_eq
!(both
.0, 0);
47 assert_eq
!(both
.1, 0);
48 let both
: (i32, i32) = a();
49 assert_eq
!(both
.0, 0);
50 assert_eq
!(both
.1, 0);
54 assert_eq
!(c(&mut vec
![22].into_iter()), Some(22));