1#![no_std]
4#![forbid(unsafe_code)]
5
6use core::fmt::Debug;
16use core::panic::{RefUnwindSafe, UnwindSafe};
17
18#[allow(unused)]
19trait NoImplementers {}
20
21#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
22struct NotUwsInner<T>(T);
23
24#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
25struct NotRuwsInner<T>(T);
26
27impl<T> UnwindSafe for NotUwsInner<T> where T: NoImplementers {}
28impl<T> RefUnwindSafe for NotRuwsInner<T> where T: NoImplementers {}
29
30#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
35pub struct PhantomUnwindUnsafe(NotUwsInner<()>);
36
37#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
42pub struct PhantomRefUnwindUnsafe(NotRuwsInner<()>);
43
44impl PhantomUnwindUnsafe {
45 pub const DEFAULT: Self = Self(NotUwsInner(()));
46}
47
48impl PhantomRefUnwindUnsafe {
49 pub const DEFAULT: Self = Self(NotRuwsInner(()));
50}
51
52impl Debug for PhantomUnwindUnsafe {
53 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
54 f.write_str("PhantomUnwindUnsafe")
55 }
56}
57
58impl Debug for PhantomRefUnwindUnsafe {
59 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
60 f.write_str("PhantomRefUnwindUnsafe")
61 }
62}