1use core::mem::ManuallyDrop;
2
3#[repr(C)]
4pub union Transmuter<F, T> {
5 pub from: ManuallyDrop<F>,
6 pub to: ManuallyDrop<T>,
7}
8
9#[macro_export]
10#[doc(hidden)]
11macro_rules! __priv_transmute {
12 ($from:ty, $to:ty, $value:expr) => {{
13 $crate::__::ManuallyDrop::into_inner(
14 $crate::utils::Transmuter::<$from, $to> {
15 from: $crate::__::ManuallyDrop::new($value),
16 }
17 .to,
18 )
19 }};
20}
21
22
23macro_rules! conditionally_const {
24 (
25 feature = $feature:literal;
26
27 $( #[$meta:meta] )*
28 $vis:vis fn $fn_name:ident $([$($generics:tt)*])? (
29 $($params:tt)*
30 ) -> $ret:ty
31 $block:block
32 ) => (
33 $(#[$meta])*
34 #[cfg(feature = $feature)]
35 $vis const fn $fn_name $(<$($generics)*>)? ($($params)*) -> $ret $block
36
37 $(#[$meta])*
38 #[cfg(not(feature = $feature))]
39 $vis fn $fn_name $(<$($generics)*>)? ($($params)*) -> $ret $block
40 )
41} pub(crate) use conditionally_const;
42
43