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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//! Tests checking that types implement Tagged.
use supply::lt_list::{Lt1, LtList};
use supply::tag::{Tagged, WithLt};
#[allow(unused)]
fn assert_tagged<T: ?Sized + Tagged, L: LtList>()
where
T::Tag: WithLt<L, Reified = T>,
{
}
// Primitives
const _: () = {
fn with_none() {
// assert_tagged::<bool, ()>();
//
// assert_tagged::<char, ()>();
//
// assert_tagged::<f32, ()>();
// assert_tagged::<f64, ()>();
//
// assert_tagged::<i8, ()>();
// assert_tagged::<i16, ()>();
// assert_tagged::<i32, ()>();
// assert_tagged::<i64, ()>();
// assert_tagged::<i128, ()>();
// assert_tagged::<isize, ()>();
//
// assert_tagged::<str, ()>();
//
// assert_tagged::<u8, ()>();
// assert_tagged::<u16, ()>();
// assert_tagged::<u32, ()>();
// assert_tagged::<u64, ()>();
// assert_tagged::<u128, ()>();
// assert_tagged::<usize, ()>();
}
fn with_t<'a, T: Tagged + 'a, L: LtList<Head = Lt1<'a>>>()
where
T::Tag: WithLt<L, Reified = T>,
{
// assert_tagged::<*const T, L>();
// assert_tagged::<*mut T, L>();
//
// assert_tagged::<&'a T, L>();
// assert_tagged::<&'a mut T, L>();
//
// assert_tagged::<[T], L>();
}
fn with_n<const N: usize, T: Tagged, L: LtList>()
where
T::Tag: WithLt<L, Reified = T>,
{
// assert_tagged::<[T; N], L>();
}
fn with_t6<'a, T0, T1, T2, T3, T4, T5, L: LtList<Head = Lt1<'a>>>()
where
T0: Tagged + 'a,
T0::Tag: WithLt<L, Reified = T0>,
T1: Tagged + 'a,
T1::Tag: WithLt<L, Reified = T1>,
T2: Tagged + 'a,
T2::Tag: WithLt<L, Reified = T2>,
T3: Tagged + 'a,
T3::Tag: WithLt<L, Reified = T3>,
T4: Tagged + 'a,
T4::Tag: WithLt<L, Reified = T4>,
T5: Tagged + 'a,
T5::Tag: WithLt<L, Reified = T5>,
{
// assert_tagged::<(), L>();
// assert_tagged::<(T0,), L>();
// assert_tagged::<(T0, T1), L>();
// assert_tagged::<(T0, T1, T2), L>();
// assert_tagged::<(T0, T1, T2, T3), L>();
// assert_tagged::<(T0, T1, T2, T3, T4), L>();
// assert_tagged::<(T0, T1, T2, T3, T4, T5), L>();
}
};