diff options
Diffstat (limited to 'src/test/ui/never_type/dispatch_from_dyn_zst.rs')
-rw-r--r-- | src/test/ui/never_type/dispatch_from_dyn_zst.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/test/ui/never_type/dispatch_from_dyn_zst.rs b/src/test/ui/never_type/dispatch_from_dyn_zst.rs new file mode 100644 index 000000000..764f58ce9 --- /dev/null +++ b/src/test/ui/never_type/dispatch_from_dyn_zst.rs @@ -0,0 +1,51 @@ +// run-pass + +#![feature(unsize, dispatch_from_dyn, never_type)] + +#![allow(dead_code)] + +use std::{ + ops::DispatchFromDyn, + marker::{Unsize, PhantomData}, +}; + +struct Zst; +struct NestedZst(PhantomData<()>, Zst); + + +struct WithUnit<T: ?Sized>(Box<T>, ()); +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<WithUnit<U>> for WithUnit<T> + where T: Unsize<U> {} + +struct WithPhantom<T: ?Sized>(Box<T>, PhantomData<()>); +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<WithPhantom<U>> for WithPhantom<T> + where T: Unsize<U> {} + +struct WithNever<T: ?Sized>(Box<T>, !); +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<WithNever<U>> for WithNever<T> + where T: Unsize<U> {} + +struct WithZst<T: ?Sized>(Box<T>, Zst); +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<WithZst<U>> for WithZst<T> + where T: Unsize<U> {} + +struct WithNestedZst<T: ?Sized>(Box<T>, NestedZst); +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<WithNestedZst<U>> for WithNestedZst<T> + where T: Unsize<U> {} + + +struct Generic<T: ?Sized, A>(Box<T>, A); +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Generic<U, ()>> for Generic<T, ()> + where T: Unsize<U> {} +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Generic<U, PhantomData<()>>> + for Generic<T, PhantomData<()>> + where T: Unsize<U> {} +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Generic<U, !>> for Generic<T, !> + where T: Unsize<U> {} +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Generic<U, Zst>> for Generic<T, Zst> + where T: Unsize<U> {} +impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Generic<U, NestedZst>> for Generic<T, NestedZst> + where T: Unsize<U> {} + + +fn main() {} |