@@ -36,3 +36,31 @@ unsafe impl<T> Align1 for [T] where T: Align1 {}
3636// SAFETY:
3737// Allowed because an array of `T` is aligned to `T`.
3838unsafe impl < T , const N : usize > Align1 for [ T ; N ] where T : Align1 { }
39+
40+ macro_rules! impl_align1_tuple {
41+ ( $( $name: ident) ,+) => {
42+ // SAFETY:
43+ // Allowed because a tuple will have an alignment equal to the max of its members.
44+ unsafe impl <$( $name) ,+> Align1 for ( $( $name, ) +)
45+ where
46+ $( $name: Align1 , ) +
47+ { }
48+ } ;
49+ }
50+ // impl up to 16 elements
51+ impl_align1_tuple ! ( T1 ) ;
52+ impl_align1_tuple ! ( T1 , T2 ) ;
53+ impl_align1_tuple ! ( T1 , T2 , T3 ) ;
54+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 ) ;
55+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 ) ;
56+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 ) ;
57+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 ) ;
58+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ) ;
59+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ) ;
60+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ) ;
61+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ) ;
62+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ) ;
63+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ) ;
64+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ) ;
65+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ) ;
66+ impl_align1_tuple ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ) ;
0 commit comments