Info
This post is auto-generated from RSS feed The Rust Programming Language Forum - Latest topics. Source: Any way to guarantee reference to ZST in PhantomData is zero-cost
I have two types that look like this:
pub type Foo<'a> = PhantomData<fn(&'a ()) -> &'a ()>;
pub struct Bar<'a>(PhantomData<&'a Foo<'a>>);
How can I construct a Bar
and with the same lifetime as a Foo
and be guaranteed constructing Bar
has zero overhead?
One way to do it is like this:
impl<'a> Bar<'a> {
pub fn new(_: &'a Foo<'a>) -> Self {
Bar(PhantomData)
}
}
let foo: Foo = PhantomData;
let bar = Bar::new(&foo);
But this is no longer guaranteed to be zero-cost, as I create a reference to a ZST which is not guaranteed to be zero sized or optimized away. And changing the constructor to take in a Foo<'a>
without a reference changes the behavior of my program. I feel like there should be a way to do this without actually creating the reference, or am I asking for too much and is this not possible?
7 posts - 3 participants
🏷️ Rust_feed