ZeroSize

Trait ZeroSize 

Source
pub trait ZeroSize<const ZERO: bool>: ZeroSize<ZERO> { }
Expand description

Describes a type whose size is zero.

§Examples

#![feature(generic_const_exprs)]
struct Zst<T: size_trait::ZeroSize<true>>(T);
let _ = Zst(());
let _ = Zst(core::marker::PhantomData::<u8>);
let _ = Zst([] as [u64; 0]);
let _ = Zst(Zst(Zst(Zst((Zst(()), Zst(()))))));

struct NonZst<T: size_trait::ZeroSize<false>>(T);
let _ = NonZst(0);
let _ = NonZst(true);
let _ = NonZst(&[] as &[u64]);
let _ = NonZst([0u8; 100]);
let _ = NonZst(NonZst(NonZst(NonZst((NonZst(0u8), NonZst(0u8))))));

§Compilation Errors

#![feature(generic_const_exprs)]
struct OneByte(u8);
impl size_trait::ZeroSize<true> for OneByte {}
#![feature(generic_const_exprs)]
struct ZeroBytes;
impl size_trait::ZeroSize<false> for ZeroBytes {}
#![feature(generic_const_exprs)]
struct Nothing<T: size_trait::ZeroSize<true>>(T);
let _ = Nothing(0u8);
#![feature(generic_const_exprs)]
struct Something<T: size_trait::ZeroSize<false>>(T);
let _ = Something(());

Implementors§

Source§

impl<const ZERO: bool, T: ZeroSize<ZERO>> ZeroSize<ZERO> for T