Skip to content

Commit 6751adc

Browse files
authored
Impl ZeroablInOption for several function types. (#308)
1 parent 66569e6 commit 6751adc

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/zeroable_in_option.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,29 @@ unsafe impl<T: ?Sized> ZeroableInOption for &'_ mut T {}
3333
#[cfg(feature = "extern_crate_alloc")]
3434
#[cfg_attr(feature = "nightly_docs", doc(cfg(feature = "extern_crate_alloc")))]
3535
unsafe impl<T: ?Sized> ZeroableInOption for alloc::boxed::Box<T> {}
36+
37+
macro_rules! impl_for_fn {
38+
($($ArgTy:ident),* $(,)?) => {
39+
unsafe impl<$($ArgTy,)* R> ZeroableInOption for fn($($ArgTy,)*) -> R {}
40+
unsafe impl<$($ArgTy,)* R> ZeroableInOption for unsafe fn($($ArgTy,)*) -> R {}
41+
unsafe impl<$($ArgTy,)* R> ZeroableInOption for extern "C" fn($($ArgTy,)*) -> R {}
42+
unsafe impl<$($ArgTy,)* R> ZeroableInOption for unsafe extern "C" fn($($ArgTy,)*) -> R {}
43+
unsafe impl<$($ArgTy,)* R> ZeroableInOption for extern "system" fn($($ArgTy,)*) -> R {}
44+
unsafe impl<$($ArgTy,)* R> ZeroableInOption for unsafe extern "system" fn($($ArgTy,)*) -> R {}
45+
};
46+
}
47+
48+
impl_for_fn!();
49+
impl_for_fn!(A);
50+
impl_for_fn!(A, B);
51+
impl_for_fn!(A, B, C);
52+
impl_for_fn!(A, B, C, D);
53+
impl_for_fn!(A, B, C, D, E);
54+
impl_for_fn!(A, B, C, D, E, F);
55+
impl_for_fn!(A, B, C, D, E, F, G);
56+
impl_for_fn!(A, B, C, D, E, F, G, H);
57+
impl_for_fn!(A, B, C, D, E, F, G, H, I);
58+
impl_for_fn!(A, B, C, D, E, F, G, H, I, J);
59+
impl_for_fn!(A, B, C, D, E, F, G, H, I, J, K);
60+
impl_for_fn!(A, B, C, D, E, F, G, H, I, J, K, L);
61+
impl_for_fn!(A, B, C, D, E, F, G, H, I, J, K, L, M);

0 commit comments

Comments
 (0)